Merge pull request #504 from schmengler/namespace-fixes-rc1

BUGFIX: Handling of classes with namespaces in database
This commit is contained in:
Sam Minnée 2012-06-04 15:31:26 -07:00
commit 90378b0998
3 changed files with 6 additions and 4 deletions

View File

@ -1131,7 +1131,7 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
if($dbCommand == 'insert') { if($dbCommand == 'insert') {
$manipulation[$class]['fields']["Created"] = "'".SS_Datetime::now()->Rfc2822()."'"; $manipulation[$class]['fields']["Created"] = "'".SS_Datetime::now()->Rfc2822()."'";
//echo "<li>$this->class - " .get_class($this); //echo "<li>$this->class - " .get_class($this);
$manipulation[$class]['fields']["ClassName"] = "'$this->class'"; $manipulation[$class]['fields']["ClassName"] = DB::getConn()->prepStringForDB($this->class);
} }
} }
@ -2942,8 +2942,8 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
// Build index list // Build index list
$manymanyIndexes = array( $manymanyIndexes = array(
"{$this->class}ID" => true, "\"{$this->class}ID\"" => true,
(($this->class == $childClass) ? "ChildID" : "{$childClass}ID") => true, (($this->class == $childClass) ? "ChildID" : "\"{$childClass}ID\"") => true,
); );
DB::requireTable("{$this->class}_$relationship", $manymanyFields, $manymanyIndexes, true, null, $extensions); DB::requireTable("{$this->class}_$relationship", $manymanyFields, $manymanyIndexes, true, null, $extensions);

View File

@ -198,6 +198,7 @@ class DataQuery {
if(preg_match('/^"([^"]+)"/', $collision, $matches)) { if(preg_match('/^"([^"]+)"/', $collision, $matches)) {
$collisionBase = $matches[1]; $collisionBase = $matches[1];
$collisionClasses = ClassInfo::subclassesFor($collisionBase); $collisionClasses = ClassInfo::subclassesFor($collisionBase);
$collisionClasses = array_map(array(DB::getConn(), 'prepStringForDB'), $collisionClasses);
$caseClauses[] = "WHEN \"$baseClass\".\"ClassName\" IN ('" $caseClauses[] = "WHEN \"$baseClass\".\"ClassName\" IN ('"
. implode("', '", $collisionClasses) . "') THEN $collision"; . implode("', '", $collisionClasses) . "') THEN $collision";
} else { } else {
@ -215,6 +216,7 @@ class DataQuery {
// Get the ClassName values to filter to // Get the ClassName values to filter to
$classNames = ClassInfo::subclassesFor($this->dataClass); $classNames = ClassInfo::subclassesFor($this->dataClass);
if(!$classNames) user_error("DataList::create() Can't find data sub-classes for '$callerClass'"); if(!$classNames) user_error("DataList::create() Can't find data sub-classes for '$callerClass'");
$classNames = array_map(array(DB::getConn(), 'prepStringForDB'), $classNames);
$query->addWhere("\"$baseClass\".\"ClassName\" IN ('" . implode("','", $classNames) . "')"); $query->addWhere("\"$baseClass\".\"ClassName\" IN ('" . implode("','", $classNames) . "')");
} }
} }

View File

@ -776,7 +776,7 @@ class MySQLDatabase extends SS_Database {
$classes = array(); $classes = array();
foreach($matches[0] as $value) { foreach($matches[0] as $value) {
$classes[] = trim($value, "'"); $classes[] = stripslashes(trim($value, "'"));
} }
return $classes; return $classes;
} }