1
0
mirror of synced 2025-01-20 15:31:40 +03:00
This commit is contained in:
zYne 2007-01-10 20:36:29 +00:00
parent 0bafdb6694
commit 78b06ef3ae
3 changed files with 106 additions and 11 deletions

View File

@ -48,11 +48,14 @@ class Doctrine_Db_Event
protected $endedMicrotime; protected $endedMicrotime;
public function __construct($invoker, $type, $query = null) public function __construct($invoker, $type, $query = null)
{ {
$this->invoker = $invoker; $this->invoker = $invoker;
$this->type = $type; $this->type = $type;
$this->query = $query; $this->query = $query;
} }
public function getQuery() public function getQuery()
{ {

View File

@ -30,7 +30,7 @@ Doctrine::autoload('Doctrine_Overloadable');
* @since 1.0 * @since 1.0
* @version $Revision$ * @version $Revision$
*/ */
class Doctrine_Db_Profiler implements Doctrine_Overloadable class Doctrine_Db_Profiler extends Doctrine_Access implements Doctrine_Overloadable, IteratorAggregate
{ {
/** /**
* @param array $listeners an array containing all availible listeners * @param array $listeners an array containing all availible listeners
@ -47,6 +47,21 @@ class Doctrine_Db_Profiler implements Doctrine_Overloadable
* @param array $events an array containing all listened events * @param array $events an array containing all listened events
*/ */
private $events = array(); private $events = array();
/**
* constructor
*/
public function __construct() {
}
/**
* setFilterQueryType
*
* @param integer $filter
* @return boolean
*/
public function setFilterQueryType() {
}
/** /**
* method overloader * method overloader
* this method is used for invoking different listeners, for the full * this method is used for invoking different listeners, for the full
@ -55,7 +70,7 @@ class Doctrine_Db_Profiler implements Doctrine_Overloadable
* @param string $m the name of the method * @param string $m the name of the method
* @param array $a method arguments * @param array $a method arguments
* @see Doctrine_Db_EventListener * @see Doctrine_Db_EventListener
* @return void * @return boolean
*/ */
public function __call($m, $a) public function __call($m, $a)
{ {
@ -64,21 +79,83 @@ class Doctrine_Db_Profiler implements Doctrine_Overloadable
throw new Doctrine_Db_Profiler_Exception("Couldn't listen event. Event should be an instance of Doctrine_Db_Event."); throw new Doctrine_Db_Profiler_Exception("Couldn't listen event. Event should be an instance of Doctrine_Db_Event.");
} }
// event methods should start with 'on' // event methods should start with 'on'
if (substr($m, 0, 2) !== 'on') { if (substr($m, 0, 2) !== 'on') {
throw new Doctrine_Db_Profiler_Exception("Couldn't invoke listener $m."); throw new Doctrine_Db_Profiler_Exception("Couldn't invoke listener :" . $m);
}
if (substr($m, 2, 3) === 'Pre' && substr($m, 2, 7) !== 'Prepare') {
if ( ! in_array(strtolower(substr($m, 5)), $this->listeners)) {
throw new Doctrine_Db_Profiler_Exception("Couldn't invoke listener :" . $m);
} }
if (substr($m, 2, 3) === 'Pre' && in_array(strtolower(substr($m, 3)), $this->listeners)) {
// pre-event listener found // pre-event listener found
$a[0]->start(); $a[0]->start();
if( ! in_array($a[0], $this->events, true)) {
$this->events[] = $a[0];
}
} else { } else {
if ( ! in_array(strtolower(substr($m, 2)), $this->listeners)) {
throw new Doctrine_Db_Profiler_Exception("Couldn't invoke listener :" . $m);
}
// after-event listener found // after-event listener found
$a[0]->end(); $a[0]->end();
} }
/**
$this->events[] = $a[0]; * If filtering by query type is enabled, only keep the query if
* it was one of the allowed types.
*/
if ( ! is_null($this->filterTypes)) {
if ( ! ($a[0]->getQueryType() & $this->_filterTypes)) {
return false;
}
} }
return true;
}
/**
* get
*
* @param mixed $key
* @return Doctrine_Event
*/
public function get($key)
{
if (isset($this->events[$key])) {
return $this->events[$key];
}
return null;
}
/**
* getAll
* returns all profiled events as an array
*
* @return array all events in an array
*/
public function getAll()
{
return $this->events;
}
/**
* getIterator
* returns an iterator that iterates through the logged events
*
* @return ArrayIterator
*/
public function getIterator()
{
return new ArrayIterator($this->events);
}
/**
* pop the last event from the event stack
*
* @return Doctrine_Db_Event
*/
public function pop()
{
return array_pop($this->events);
}
/** /**
* Get the Doctrine_Db_Event object for the last query that was run, regardless if it has * Get the Doctrine_Db_Event object for the last query that was run, regardless if it has
* ended or not. If the event has not ended, it's end time will be Null. * ended or not. If the event has not ended, it's end time will be Null.

View File

@ -217,18 +217,26 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable
if ($found) if ($found)
break; break;
$e2 = explode(":",$option); $e2 = explode(':', $option);
switch (strtolower($e2[0])) { switch (strtolower($e2[0])) {
case "autoincrement": case 'autoincrement':
case 'autoinc':
$this->identifierType = Doctrine_Identifier::AUTO_INCREMENT; $this->identifierType = Doctrine_Identifier::AUTO_INCREMENT;
$found = true; $found = true;
break; break;
case "seq": case 'seq':
case 'sequence':
$this->identifierType = Doctrine_Identifier::SEQUENCE; $this->identifierType = Doctrine_Identifier::SEQUENCE;
$found = true; $found = true;
if($value) {
$this->options['sequenceName'] = $value;
} else {
$this->options['sequenceName'] = $this->conn->getSequenceName($this->options['tableName']);
}
break; break;
}; }
} }
if ( ! isset($this->identifierType)) { if ( ! isset($this->identifierType)) {
$this->identifierType = Doctrine_Identifier::NORMAL; $this->identifierType = Doctrine_Identifier::NORMAL;
@ -332,16 +340,19 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable
} }
/** /**
* setColumn * setColumn
*
* @param string $name * @param string $name
* @param string $type * @param string $type
* @param integer $length * @param integer $length
* @param mixed $options * @param mixed $options
* @throws Doctrine_Table_Exception if trying use wrongly typed parameter
* @return void * @return void
*/ */
final public function setColumn($name, $type, $length = null, $options = array()) { final public function setColumn($name, $type, $length = null, $options = array()) {
if (is_string($options)) { if (is_string($options)) {
$options = explode('|', $options); $options = explode('|', $options);
} }
foreach ($options as $k => $option) { foreach ($options as $k => $option) {
if (is_numeric($k)) { if (is_numeric($k)) {
if ( ! empty($option)) { if ( ! empty($option)) {
@ -355,6 +366,10 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable
if ($length == null) if ($length == null)
$length = 2147483647; $length = 2147483647;
if((string) (int) $length !== (string) $length) {
throw new Doctrine_Table_Exception('Invalid argument given for column length');
}
$this->columns[$name] = array($type, $length, $options); $this->columns[$name] = array($type, $length, $options);
if (isset($options['primary'])) { if (isset($options['primary'])) {