14 private $_constraints;
24 foreach ($this->_getTables() as $key => $val) {
25 $this->_dumpTable($key);
27 $result = $this->_setHeader();
28 $result .= ob_get_contents();
29 $result .= $this->_getConstraints();
30 $result .= $this->_setFooter();
41 private function _getConstraints()
43 $sql =
"--\r\n-- Constraints for dumped tables\r\n--" . PHP_EOL . PHP_EOL;
45 foreach ($this->_constraints as $key => $value) {
46 if ($first && count($value[0]) > 0) {
47 $sql .=
"--\r\n-- Constraints for table `$key`\r\n--" . PHP_EOL . PHP_EOL;
48 $sql .=
"ALTER TABLE $key" . PHP_EOL;
50 if (count($value[0]) > 0) {
51 for ($i = 0; $i < count($value[0]); $i++) {
52 if (strpos($value[0][$i],
'CONSTRAINT') ===
false) {
53 $sql .= preg_replace(
'/(FOREIGN[\s]+KEY)/',
"\tADD $1", $value[0][$i]);
55 $sql .= preg_replace(
'/(CONSTRAINT)/',
"\tADD $1", $value[0][$i]);
57 if ($i == count($value[0]) - 1) {
58 $sql .=
";" . PHP_EOL;
60 if ($i < count($value[0]) - 1) {
76 private function _setHeader()
88 private function _setFooter()
102 private function _dumpTable($tableName)
104 $db = Yii::app()->db;
105 $pdo = $db->getPdoInstance();
107 echo PHP_EOL .
"--\n-- Structure for table `$tableName`\n--" . PHP_EOL;
108 echo PHP_EOL .
'DROP TABLE IF EXISTS ' . $db->quoteTableName($tableName) .
';' . PHP_EOL . PHP_EOL;
110 $q = $db->createCommand(
'SHOW CREATE TABLE ' . $db->quoteTableName($tableName) .
';')->queryRow();
112 $create_query = $q[
'Create Table'];
114 $pattern =
'/CONSTRAINT.*|FOREIGN[\s]+KEY/';
117 preg_match_all($pattern, $create_query, $this->_constraints[$tableName]);
119 echo $create_query .
';' . PHP_EOL;
121 $rows = $db->createCommand(
'SELECT * FROM ' . $db->quoteTableName($tableName) .
';')->queryAll();
127 echo PHP_EOL .
"--\n-- Data for table `$tableName`\n--" . PHP_EOL . PHP_EOL;
129 $attrs = array_map(array($db,
'quoteColumnName'), array_keys($rows[0]));
130 echo
'INSERT INTO ' . $db->quoteTableName($tableName) .
'' .
" (", implode(
', ', $attrs),
') VALUES' . PHP_EOL;
132 $rowsCount = count($rows);
133 foreach ($rows AS $row) {
135 foreach ($row AS $key => $value) {
136 if ($value === null) {
139 $row[$key] = $pdo->quote($value);
143 echo
" (", implode(
', ', $row),
')';
144 if ($i < $rowsCount - 1) {
162 private function _getTables()
164 $db = Yii::app()->db;
165 return $db->getSchema()->getTables();