Added Trigger Support for PostGRESQL PDO Driver in PDO LogStream Class

This commit is contained in:
Andre Lorbach 2011-11-04 16:28:24 +01:00
parent 4e133d3a70
commit 739598874e

View File

@ -331,13 +331,16 @@ class LogStreamPDO extends LogStream {
$szDBTriggerField = $dbmapping[$szTableType]['DBMAPPINGS'][$myTriggerProperty]; $szDBTriggerField = $dbmapping[$szTableType]['DBMAPPINGS'][$myTriggerProperty];
// Create Triggername // Create Triggername
$szTriggerName = $szDBName . "_" . $szTableName . "_" . $szDBTriggerField; $szTriggerName = strtolower($szDBName . "_" . $szTableName . "_" . $szDBTriggerField);
// Try to find logstream trigger // Try to find logstream trigger
if ( count($arrIndexTriggers) > 0 ) if ( count($arrIndexTriggers) > 0 )
{ {
if ( in_array($szTriggerName, $arrIndexTriggers) ) if ( in_array($szTriggerName, $arrIndexTriggers) )
{
OutputDebugMessage("LogStreamPDO|VerifyChecksumTrigger: Found TRIGGER '" . $szTriggerName. "' for table '" . $szTableName . "'", DEBUG_ULTRADEBUG);
return SUCCESS; return SUCCESS;
}
else else
{ {
// Index is missing for this field! // Index is missing for this field!
@ -452,16 +455,33 @@ class LogStreamPDO extends LogStream {
$szTableName = $this->_logStreamConfigObj->DBTableName; $szTableName = $this->_logStreamConfigObj->DBTableName;
// Create Triggername // Create Triggername
$szTriggerName = $szDBName . "_" . $szTableName . "_" . $myDBTriggerField; $szTriggerName = strtolower($szDBName . "_" . $szTableName . "_" . $myDBTriggerField);
// TODO if ( $this->_logStreamConfigObj->DBType == DB_MYSQL )
// Create TRIGGER SQL! // Create TRIGGER SQL!
if ( $this->_logStreamConfigObj->DBType == DB_MYSQL )
$szSql ="CREATE TRIGGER " . $szTriggerName . " BEFORE INSERT ON `" . $szTableName . "` $szSql ="CREATE TRIGGER " . $szTriggerName . " BEFORE INSERT ON `" . $szTableName . "`
FOR EACH ROW FOR EACH ROW
BEGIN BEGIN
SET NEW." . $myDBTriggerCheckSumField . " = crc32(NEW." . $myDBTriggerField . "); SET NEW." . $myDBTriggerCheckSumField . " = crc32(NEW." . $myDBTriggerField . ");
END END
;"; ;";
else if ( $this->_logStreamConfigObj->DBType == DB_PGSQL )
// Experimental Trigger Support for POSTGRESQL
$szSql ="
CREATE LANGUAGE plpgsql ;
CREATE FUNCTION " . $szTriggerName . "() RETURNS trigger AS $" . $szTriggerName . "$
BEGIN
NEW." . $myDBTriggerCheckSumField . " := hashtext(NEW." . $myDBTriggerField . ");
RETURN NEW;
END;
$" . $szTriggerName . "$ LANGUAGE plpgsql;
CREATE TRIGGER " . $szTriggerName . " BEFORE INSERT OR UPDATE ON \"" . $szTableName . "\"
FOR EACH ROW EXECUTE PROCEDURE " . $szTriggerName . "();
";
else
// NOT SUPPORTED
return null;
return $szSql; return $szSql;
} }
@ -2298,9 +2318,15 @@ class LogStreamPDO extends LogStream {
// Init Array // Init Array
$arrIndexTriggers = array(); $arrIndexTriggers = array();
// TODO if ( $this->_logStreamConfigObj->DBType == DB_MYSQL )
// Create SQL and Get INDEXES for table! // Create SQL and Get INDEXES for table!
if ( $this->_logStreamConfigObj->DBType == DB_MYSQL )
$szSql = "SHOW TRIGGERS"; $szSql = "SHOW TRIGGERS";
else if ( $this->_logStreamConfigObj->DBType == DB_PGSQL )
$szSql = "select tgname as \"Trigger\" from pg_trigger;";
else
// Not supported in this case!
return null;
$myQuery = $this->_dbhandle->query($szSql); $myQuery = $this->_dbhandle->query($szSql);
if ($myQuery) if ($myQuery)
{ {