Permalink
Browse files

Re-implementing Mysql::listDetailedSources() to not use prepared stat…

…ements, using php <= 5.3.5 + mysqlnd internal driver causes segmentation faults when using a similar query from this method several times.
  • Loading branch information...
1 parent 7055939 commit b8aa0005894b82f524b7848acf765bc30ebcaa27 @lorenzo lorenzo committed Oct 1, 2011
View
41 lib/Cake/Model/Datasource/Database/Mysql.php
@@ -607,34 +607,35 @@ public function listDetailedSources($name = null) {
$condition = '';
$params = array();
if (is_string($name)) {
- $condition = ' WHERE name = ?' ;
- $params = array($name);
+ $condition = ' WHERE name = ' . $this->value($name);
+ $params = array($name);
}
- $result = $this->_execute('SHOW TABLE STATUS ' . $condition, $params);
+ $result = $this->_connection->query('SHOW TABLE STATUS ' . $condition, PDO::FETCH_ASSOC);
if (!$result) {
- $result->closeCursor();
- return array();
+ $result->closeCursor();
+ return array();
} else {
- $tables = array();
- while ($row = $result->fetch()) {
- $tables[$row->Name] = (array) $row;
- unset($tables[$row->Name]['queryString']);
- if (!empty($row->Collation)) {
- $charset = $this->getCharsetName($row->Collation);
- if ($charset) {
- $tables[$row->Name]['charset'] = $charset;
- }
+ $tables = array();
+ foreach ($result as $row) {
+ $tables[$row['Name']] = (array) $row;
+ unset($tables[$row['Name']]['queryString']);
+ if (!empty($row['Collation'])) {
+ $charset = $this->getCharsetName($row['Collation']);
+ if ($charset) {
+ $tables[$row['Name']]['charset'] = $charset;
+ }
+ }
}
- }
- $result->closeCursor();
- if (is_string($name) && isset($tables[$name])) {
- return $tables[$name];
- }
- return $tables;
+ $result->closeCursor();
+ if (is_string($name) && isset($tables[$name])) {
+ return $tables[$name];
+ }
+ return $tables;
}
}
+
/**
* Converts database-layer column types to basic types
*
View
2 lib/Cake/Test/Case/Model/Datasource/Database/MysqlTest.php
@@ -65,7 +65,7 @@ public function setUp() {
}
$this->_debug = Configure::read('debug');
Configure::write('debug', 1);
- $this->model = new MysqlTestModel();
+ $this->model = ClassRegistry::init('MysqlTestModel');
}
/**

0 comments on commit b8aa000

Please sign in to comment.