Revision 2105
Added by darkviper almost 11 years ago
| branches/2.8.x/CHANGELOG | ||
|---|---|---|
| 11 | 11 |
! = Update/Change |
| 12 | 12 |
=============================================================================== |
| 13 | 13 |
|
| 14 |
24 Nov-2014 Build 2105 Manuela v.d.Decken(DarkViper) |
|
| 15 |
- removed importSql() method from class WbDatabase |
|
| 16 |
+ new class SqlImport added |
|
| 14 | 17 |
20 Nov-2014 Build 2104 Manuela v.d.Decken(DarkViper) |
| 15 | 18 |
! complete rebuild of wb/install/ - changed to use import-struct.sql |
| 16 | 19 |
! change class WbDatabase from mysql to msqli |
| branches/2.8.x/wb/admin/interface/version.php | ||
|---|---|---|
| 51 | 51 |
|
| 52 | 52 |
// check if defined to avoid errors during installation (redirect to admin panel fails if PHP error/warnings are enabled) |
| 53 | 53 |
if(!defined('VERSION')) define('VERSION', '2.8.4');
|
| 54 |
if(!defined('REVISION')) define('REVISION', '2104');
|
|
| 54 |
if(!defined('REVISION')) define('REVISION', '2105');
|
|
| 55 | 55 |
if(!defined('SP')) define('SP', '');
|
| branches/2.8.x/wb/framework/WbDatabase.php | ||
|---|---|---|
| 526 | 526 |
$sEngine = 'MyISAM', |
| 527 | 527 |
$sCollation = 'utf8_unicode_ci') |
| 528 | 528 |
{
|
| 529 |
return $this->importSql($sSqlDump, $sTablePrefix, $bPreserve, $sEngine, $sCollation);
|
|
| 529 |
return $this->importSql($sSqlDump, $sTablePrefix, $sAction, $sEngine, $sCollation);
|
|
| 530 | 530 |
} |
| 531 |
/** |
|
| 532 |
* Import an SQl-Dumpfile witch can include unlimited placeholders for values |
|
| 533 |
* @param mixed $mSqlDump can be string with filename or array with additional vars |
|
| 534 |
* @param string $sTablePrefix can be used to override settings from WbDatabase object |
|
| 535 |
* @param string $sAction 'install', 'uninstall', 'upgrade', 'repair |
|
| 536 |
* @param string $sEngine kind of table engine: MyIsam(default) |
|
| 537 |
* @param string $sCollation utf8_unicode_ci(default) |
|
| 538 |
* @return bool false on error |
|
| 539 |
*/ |
|
| 540 |
public function importSql( |
|
| 541 |
$mSqlDump, |
|
| 542 |
$sTablePrefix = '', // can override settings from WbDatabase object |
|
| 543 |
$sAction = 'install', // skip 'DROP TABLE' statements |
|
| 544 |
$sEngine = 'MyISAM', // the default table engine |
|
| 545 |
$sCollation = 'utf8_unicode_ci' // the default collation to use |
|
| 546 |
) |
|
| 547 |
{
|
|
| 548 |
$retval = true; |
|
| 549 |
$this->error = ''; |
|
| 550 |
// sanitize arguments |
|
| 551 |
if (! is_string($sAction)) {
|
|
| 552 |
$sAction = $sAction ? 'repair' : 'install'; |
|
| 553 |
} |
|
| 554 |
$aAllowedActions = array('install', 'uninstall', 'upgrade', 'repair');
|
|
| 555 |
$sAction = strtolower(preg_replace('/^.*?('.implode('|', $aAllowedActions).')(\.php)?$/iU', '$1', $sAction));
|
|
| 556 |
$sAction = (in_array($sAction, $aAllowedActions) ? $sAction : 'install'); |
|
| 557 |
$sTablePrefix = trim($sTablePrefix); |
|
| 558 |
$aEngineTypes = array( |
|
| 559 |
'csv' => 'CSV', |
|
| 560 |
'blackhole' => 'BLACKHOLE', |
|
| 561 |
'memory' => 'MEMORY', |
|
| 562 |
'myisam' => 'MyISAM', |
|
| 563 |
'innodb' => 'InnoDB', |
|
| 564 |
'archive' => 'ARCHIVE', |
|
| 565 |
'mrg_myisam' => 'MRG_MYISAM' |
|
| 566 |
); |
|
| 567 |
if (isset($aEngineTypes[strtolower($sEngine)])) {
|
|
| 568 |
$sEngine = $aEngineTypes[strtolower($sEngine)]; |
|
| 569 |
} else {
|
|
| 570 |
$sEngine = 'MyISAM'; |
|
| 571 |
} |
|
| 572 |
// test if selected collation is available. Otherwise select 'utf8_unicode_ci' |
|
| 573 |
$sql = 'SELECT COUNT(*) FROM `COLLATIONS` ' |
|
| 574 |
. 'WHERE `COLLATION_NAME`=\''.$sCollation.'\''; |
|
| 575 |
$sCollation = ($this->get_one($sql) ? $sCollation : 'utf8_unicode_ci'); |
|
| 576 |
$aTmp = preg_split('/_/', $sCollation, null, PREG_SPLIT_NO_EMPTY);
|
|
| 577 |
$sCharset = $aTmp[0]; |
|
| 578 |
// define array of searches |
|
| 579 |
$aSearch = array( |
|
| 580 |
'/\{TABLE_PREFIX\}/',
|
|
| 581 |
'/\{TABLE_COLLATION\}/', // deprecated from 2.8.4
|
|
| 582 |
'/\{FIELD_COLLATION\}/', // deprecated from 2.8.4
|
|
| 583 |
'/\{TABLE_ENGINE\}/',
|
|
| 584 |
'/\{TABLE_ENGINE=([a-zA-Z_0-9]*)\}/',
|
|
| 585 |
'/\{CHARSET\}/',
|
|
| 586 |
'/\{COLLATION\}/'
|
|
| 587 |
); |
|
| 588 |
// define array of replacements |
|
| 589 |
$aReplace = array( |
|
| 590 |
$sTablePrefix, |
|
| 591 |
' COLLATE {COLLATION}', // deprecated from 2.8.4
|
|
| 592 |
' COLLATE {COLLATION}', // deprecated from 2.8.4
|
|
| 593 |
' {ENGINE='.$sEngine.'}',
|
|
| 594 |
' ENGINE=$1 DEFAULT CHARSET={CHARSET} COLLATION={COLLATION}',
|
|
| 595 |
$sCharset, |
|
| 596 |
$sCollation |
|
| 597 |
); |
|
| 598 | 531 |
|
| 599 |
if (is_array($mSqlDump)) {
|
|
| 600 |
// try to get dumpfile name |
|
| 601 |
if (!isset($mSqlDump['sSqlDump'])) {
|
|
| 602 |
$this->error = 'missing index \'sSqlDump\' in $mSqlDump'; |
|
| 603 |
return false; |
|
| 604 |
} else {
|
|
| 605 |
// get dumpfile name from array and then remove entry |
|
| 606 |
$sDumpFile = (string)$mSqlDump['sSqlDump']; |
|
| 607 |
unset($mSqlDump['sSqlDump']); |
|
| 608 |
// import all vars and it's values from array |
|
| 609 |
foreach ($mSqlDump as $sIndex => $sValue) {
|
|
| 610 |
// transform varname into placeholder name ('sPageTitle' => 'PAGE_TITLE')
|
|
| 611 |
$sIndex = strtoupper(preg_replace('/([a-z0-9])([A-Z])/', '\1_\2', ltrim($sIndex, 'a..z')));
|
|
| 612 |
// fill search/replace arrays |
|
| 613 |
$aSearch[] = '/\{'.$sIndex.'\}/';
|
|
| 614 |
$aReplace[] = $sValue ; |
|
| 615 |
} |
|
| 616 |
} |
|
| 617 |
} elseif (is_string($mSqlDump)) {
|
|
| 618 |
$sDumpFile = (string)$mSqlDump; |
|
| 619 |
} else {
|
|
| 620 |
$this->error = 'invalid argument $mSqlDump'; |
|
| 621 |
return false; |
|
| 622 |
} |
|
| 623 |
if (!is_readable($sDumpFile)) {
|
|
| 624 |
$this->Error = 'unable to open \''.$sDumpFile.'\''; |
|
| 625 |
return false; |
|
| 626 |
} |
|
| 627 |
$sql = ''; |
|
| 628 |
$aSql = file($sDumpFile, FILE_SKIP_EMPTY_LINES); |
|
| 629 |
// remove possible ByteOrderMark |
|
| 630 |
$aSql[0] = preg_replace('/^[\xAA-\xFF]{3}/', '', $aSql[0]);
|
|
| 631 |
while (sizeof($aSql) > 0) {
|
|
| 632 |
$sSqlLine = trim(array_shift($aSql)); |
|
| 633 |
if (!preg_match('/^[-\/]+.*/', $sSqlLine)) {
|
|
| 634 |
$sql = $sql.' '.$sSqlLine; |
|
| 635 |
if ((substr($sql,-1,1) == ';')) {
|
|
| 636 |
$sql = trim(preg_replace($aSearch, $aReplace, $sql)); |
|
| 637 |
$sAvailSqlObjects = 'TABLE|VIEW|INDEX|PROCEDURE|FUNCTION|TRIGGER|EVENT'; |
|
| 638 |
switch ($sAction) {
|
|
| 639 |
case 'uninstall': // skip CREATE; execute DROP |
|
| 640 |
if (preg_match('/^\s*CREATE ('.$sAvailSqlObjects.') /siU', $sql)) {
|
|
| 641 |
$sql = ''; |
|
| 642 |
continue; // read next statement |
|
| 643 |
} |
|
| 644 |
break; |
|
| 645 |
case 'upgrade': // skip DROP; execute CREATE |
|
| 646 |
case 'repair': // skip DROP; execute CREATE |
|
| 647 |
if (preg_match('/^\s*DROP ('.$sAvailSqlObjects.') /siU', $sql)) {
|
|
| 648 |
$sql = ''; |
|
| 649 |
continue; // read next statement |
|
| 650 |
} |
|
| 651 |
break; |
|
| 652 |
default: // install: execute DROP; execute CREATE |
|
| 653 |
break; |
|
| 654 |
} |
|
| 655 |
if (!$this->doQuery($sql)) {
|
|
| 656 |
$retval = false; |
|
| 657 |
$this->error = $this->getError(); |
|
| 658 |
unset($aSql); |
|
| 659 |
break; |
|
| 660 |
} |
|
| 661 |
$sql = ''; |
|
| 662 |
} |
|
| 663 |
} |
|
| 664 |
} |
|
| 665 |
return $retval; |
|
| 666 |
} // end of function importSql() |
|
| 667 | 532 |
/** |
| 668 | 533 |
* retuns the type of the engine used for requested table |
| 669 | 534 |
* @param string $table name of the table, including prefix |
| branches/2.8.x/wb/framework/SqlImport.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/** |
|
| 4 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
|
| 5 |
* |
|
| 6 |
* This program is free software: you can redistribute it and/or modify |
|
| 7 |
* it under the terms of the GNU General Public License as published by |
|
| 8 |
* the Free Software Foundation, either version 3 of the License, or |
|
| 9 |
* (at your option) any later version. |
|
| 10 |
* |
|
| 11 |
* This program is distributed in the hope that it will be useful, |
|
| 12 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
| 13 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
| 14 |
* GNU General Public License for more details. |
|
| 15 |
* |
|
| 16 |
* You should have received a copy of the GNU General Public License |
|
| 17 |
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
| 18 |
*/ |
|
| 19 |
|
|
| 20 |
/** |
|
| 21 |
* SqlImport.php |
|
| 22 |
* |
|
| 23 |
* @category Core |
|
| 24 |
* @package Core_Database |
|
| 25 |
* @copyright Manuela v.d.Decken <manuela@isteam.de> |
|
| 26 |
* @author Manuela v.d.Decken <manuela@isteam.de> |
|
| 27 |
* @license http://www.gnu.org/licenses/gpl.html GPL License |
|
| 28 |
* @version 0.0.1 |
|
| 29 |
* @revision $Revision: 2070 $ |
|
| 30 |
* @lastmodified $Date: 2014-01-03 02:21:42 +0100 (Fr, 03 Jan 2014) $ |
|
| 31 |
* @since File available since 30.11.2014 |
|
| 32 |
* @description can handle different actions with SQL-Import files |
|
| 33 |
*/ |
|
| 34 |
class SqlImport {
|
|
| 35 |
|
|
| 36 |
/** WbDatabase object */ |
|
| 37 |
protected $oDb = null; |
|
| 38 |
/** valide structure file to use for import */ |
|
| 39 |
protected $sStructFile = ''; |
|
| 40 |
/** valide TablePrefix to use for import */ |
|
| 41 |
protected $sTablePrefix = ''; |
|
| 42 |
/** default Collation to use for import of chars/text */ |
|
| 43 |
protected $sCollation = 'utf8_unicode_ci'; |
|
| 44 |
/** default engine for tables */ |
|
| 45 |
protected $sEngine = 'MyISAM'; |
|
| 46 |
/** collected error messages */ |
|
| 47 |
protected $aErrMsg = array(); |
|
| 48 |
/** possible actions for doImport() */ |
|
| 49 |
protected $aActions = array( |
|
| 50 |
'uninstall', |
|
| 51 |
'install', |
|
| 52 |
'upgrade' |
|
| 53 |
); |
|
| 54 |
/** collected additional replacements pairs */ |
|
| 55 |
protected $aReplacements = array('key'=>array(), 'value'=>array());
|
|
| 56 |
/** possible engines to use */ |
|
| 57 |
protected $aEngineTypesAvail = array( |
|
| 58 |
'memory' => 'MEMORY', |
|
| 59 |
'myisam' => 'MyISAM', |
|
| 60 |
'innodb' => 'InnoDB', |
|
| 61 |
'archive' => 'ARCHIVE' |
|
| 62 |
); |
|
| 63 |
/** SQL objects witch can be handled */ |
|
| 64 |
protected $aAvailSqlObjects = array( |
|
| 65 |
'TABLE', |
|
| 66 |
'VIEW', |
|
| 67 |
'INDEX', |
|
| 68 |
'PROCEDURE', |
|
| 69 |
'FUNCTION', |
|
| 70 |
'TRIGGER', |
|
| 71 |
'EVENT' |
|
| 72 |
); |
|
| 73 |
/** |
|
| 74 |
* Constructor |
|
| 75 |
* @param WbDatabase $oDb |
|
| 76 |
* @param string $sStructFile |
|
| 77 |
*/ |
|
| 78 |
public function __construct(WbDatabase $oDb, $sStructFile) |
|
| 79 |
{
|
|
| 80 |
$this->oDb = $oDb; |
|
| 81 |
$this->sTablePrefix = $oDb->TablePrefix; |
|
| 82 |
if (file_exists($sStructFile)) {
|
|
| 83 |
$this->sStructFile = str_replace('\\', '/', $sStructFile);
|
|
| 84 |
} else {
|
|
| 85 |
$this->sStructFile = ''; |
|
| 86 |
$this->aErrMsg[] = 'file with structure not available! ['.$sStructFile.']'; |
|
| 87 |
} |
|
| 88 |
} |
|
| 89 |
/** |
|
| 90 |
* Add Key-Value pairs for additional placeholders |
|
| 91 |
* @param string $sKey |
|
| 92 |
* @param mixed $sValue |
|
| 93 |
*/ |
|
| 94 |
public function addReplacement($sKey, $sValue = '') |
|
| 95 |
{
|
|
| 96 |
$sKey = strtoupper(preg_replace('/([a-z0-9])([A-Z])/', '\1_\2', ltrim($sKey, 'a..z')));
|
|
| 97 |
$this->aReplacements['key'][] = '/\{'.$sKey.'\}/';
|
|
| 98 |
$this->aReplacements['value'][] = $sValue; |
|
| 99 |
} |
|
| 100 |
/** |
|
| 101 |
* define another collation then default utf8_unicode_ci |
|
| 102 |
* @param string $sCollation |
|
| 103 |
* @return boolean |
|
| 104 |
*/ |
|
| 105 |
public function setDefaultCollation($sCollation = 'utf8_unicode_ci') |
|
| 106 |
{
|
|
| 107 |
$bRetval = false; |
|
| 108 |
// test if selected collation is available on current server. |
|
| 109 |
$sql = 'SHOW COLLATION LIKE \''.$this->oDb->escapeString($sCollation).'\''; |
|
| 110 |
if (($oAvailCollations = $this->oDb->doQuery($sql))) {
|
|
| 111 |
if (($oAvailCollations->numRows())) {
|
|
| 112 |
//use new collation |
|
| 113 |
$this->sCollation = $sCollation; |
|
| 114 |
$bRetval = true; |
|
| 115 |
} |
|
| 116 |
} |
|
| 117 |
return $bRetval; |
|
| 118 |
} |
|
| 119 |
/** |
|
| 120 |
* define another prefix then 'MyISAM' |
|
| 121 |
* @param string $sEngine |
|
| 122 |
* @return boolean |
|
| 123 |
*/ |
|
| 124 |
public function setDefaultEngine($sEngine ='MyISAM') |
|
| 125 |
{
|
|
| 126 |
$bRetval = false; |
|
| 127 |
if (isset($this->aEngineTypesAvail[strtolower($sEngine)])) {
|
|
| 128 |
// use new engine |
|
| 129 |
$this->sEngine = $this->aEngineTypesAvail[strtolower($sEngine)]; |
|
| 130 |
$bRetval = true; |
|
| 131 |
} |
|
| 132 |
return $bRetval; |
|
| 133 |
} |
|
| 134 |
/** |
|
| 135 |
* define another prefix then default in Wbdatabase |
|
| 136 |
* @param string $sTablePrefix |
|
| 137 |
* @return boolean |
|
| 138 |
*/ |
|
| 139 |
public function setTablePrefix($sTablePrefix = '') |
|
| 140 |
{
|
|
| 141 |
$bRetval = false; |
|
| 142 |
if ( |
|
| 143 |
// Prefix must be empty or matching allowed table names |
|
| 144 |
$sTablePrefix == '' || |
|
| 145 |
preg_match('/^[a-z][a-z0-9_]*$/i', $sTablePrefix)
|
|
| 146 |
) {
|
|
| 147 |
// use new TablePrefix |
|
| 148 |
$this->sTablePrefix = $sTablePrefix; |
|
| 149 |
$bRetval = true; |
|
| 150 |
} |
|
| 151 |
return $bRetval; |
|
| 152 |
} |
|
| 153 |
/** |
|
| 154 |
* Start and execute the import |
|
| 155 |
* @param string $sAction |
|
| 156 |
* @return boolean |
|
| 157 |
*/ |
|
| 158 |
public function doImport($sAction) |
|
| 159 |
{
|
|
| 160 |
if (! $this->sStructFile) {
|
|
| 161 |
// no file found so ignore import method |
|
| 162 |
return true; |
|
| 163 |
} |
|
| 164 |
if (! is_readable($this->sStructFile)) {
|
|
| 165 |
// file fond but it's not readable |
|
| 166 |
$this->aErrMsg[] = 'unable to read file ['.$this->sStructFile.']'; |
|
| 167 |
return false; |
|
| 168 |
} |
|
| 169 |
$sAction = strtolower( |
|
| 170 |
preg_replace( |
|
| 171 |
'/^.*?('.implode('|', $this->aActions).')(\.php)?$/i',
|
|
| 172 |
'$1', |
|
| 173 |
$sAction |
|
| 174 |
) |
|
| 175 |
); |
|
| 176 |
$sAction = ($sAction == '' ? 'install' : $sAction); |
|
| 177 |
if ($this->importSql($sAction)) {
|
|
| 178 |
return true; |
|
| 179 |
} else {
|
|
| 180 |
$this->aErrMsg[] = $this->oDb->getError(); |
|
| 181 |
return false; |
|
| 182 |
} |
|
| 183 |
} |
|
| 184 |
/** |
|
| 185 |
* return errorstrings, concatet by LF |
|
| 186 |
* @return string |
|
| 187 |
*/ |
|
| 188 |
public function getError() |
|
| 189 |
{
|
|
| 190 |
return implode(PHP_EOL, $this->aErrMsg); |
|
| 191 |
} |
|
| 192 |
/** |
|
| 193 |
* Import an SQl-Dumpfile witch can include unlimited additional placeholders for values |
|
| 194 |
* @param string $sAction 'install' || 'uninstall' || 'upgrade' |
|
| 195 |
* @return bool false on error |
|
| 196 |
*/ |
|
| 197 |
protected function importSql($sAction = 'install') |
|
| 198 |
{
|
|
| 199 |
$retval = true; |
|
| 200 |
$this->error = ''; |
|
| 201 |
// sanitize arguments |
|
| 202 |
$aTmp = preg_split('/_/', $this->sCollation, null, PREG_SPLIT_NO_EMPTY);
|
|
| 203 |
$sCharset = $aTmp[0]; |
|
| 204 |
// get from addReplacements |
|
| 205 |
$aSearch = $this->aReplacements['key']; |
|
| 206 |
// define basic array of searches |
|
| 207 |
$aSearch[] = '/\{TABLE_PREFIX\}/';
|
|
| 208 |
$aSearch[] = '/\{FIELD_COLLATION\}/';
|
|
| 209 |
$aSearch[] = '/\{TABLE_ENGINE\}/';
|
|
| 210 |
$aSearch[] = '/\{TABLE_ENGINE=([a-zA-Z_0-9]*)\}/';
|
|
| 211 |
$aSearch[] = '/\{CHARSET\}/';
|
|
| 212 |
$aSearch[] = '/\{COLLATION\}/';
|
|
| 213 |
// get from addReplacements |
|
| 214 |
$aReplace = $this->aReplacements['value']; |
|
| 215 |
// define basic array of replacements |
|
| 216 |
$aReplace[] = $this->sTablePrefix; |
|
| 217 |
$aReplace[] = ' COLLATE {COLLATION}';
|
|
| 218 |
$aReplace[] = ' {ENGINE='.$this->sEngine.'}';
|
|
| 219 |
$aReplace[] = ' ENGINE=$1 DEFAULT CHARSET={CHARSET} COLLATE={COLLATION}';
|
|
| 220 |
$aReplace[] = $sCharset; |
|
| 221 |
$aReplace[] = $this->sCollation; |
|
| 222 |
|
|
| 223 |
$sql = ''; // buffer for statements |
|
| 224 |
$aSql = file($this->sStructFile, FILE_SKIP_EMPTY_LINES|FILE_IGNORE_NEW_LINES); |
|
| 225 |
// remove possible ByteOrderMark |
|
| 226 |
$aSql[0] = preg_replace('/^[\xAA-\xFF]{3}/', '', $aSql[0]);
|
|
| 227 |
// iterate file line by line |
|
| 228 |
while (sizeof($aSql) > 0) {
|
|
| 229 |
// remove trailing and leading whitespaces |
|
| 230 |
$sSqlLine = trim(array_shift($aSql)); |
|
| 231 |
// skip line if it's a comment |
|
| 232 |
if (preg_match('/^--/', $sSqlLine)) { continue; }
|
|
| 233 |
// attach line to buffer |
|
| 234 |
$sql = $sql.' '.$sSqlLine; |
|
| 235 |
// detect end of statement |
|
| 236 |
if ((substr($sql,-1,1) == ';')) {
|
|
| 237 |
// replace placeholders in statement |
|
| 238 |
$sql = trim(preg_replace($aSearch, $aReplace, $sql)); |
|
| 239 |
$sAvailSqlObjects = implode('|', $this->aAvailSqlObjects);
|
|
| 240 |
switch ($sAction) {
|
|
| 241 |
case 'uninstall': // execute DROP - skip CREATE |
|
| 242 |
if (preg_match('/^\s*CREATE ('.$sAvailSqlObjects.') /si', $sql)) {
|
|
| 243 |
$sql = ''; // clear buffer |
|
| 244 |
continue 2; // read next statement |
|
| 245 |
} |
|
| 246 |
break; |
|
| 247 |
case 'upgrade': // skip DROP; execute CREATE |
|
| 248 |
if (preg_match('/^\s*DROP ('.$sAvailSqlObjects.') /si', $sql)) {
|
|
| 249 |
$sql = ''; // clear buffer |
|
| 250 |
continue 2; // read next statement |
|
| 251 |
} |
|
| 252 |
break; |
|
| 253 |
default: // install: execute DROP; execute CREATE |
|
| 254 |
break; |
|
| 255 |
} |
|
| 256 |
if (!$this->oDb->doQuery($sql)) {
|
|
| 257 |
$retval = false; |
|
| 258 |
$this->aErrMsg[] = $this->oDb->getError(); |
|
| 259 |
unset($aSql); |
|
| 260 |
break; |
|
| 261 |
} |
|
| 262 |
$sql = ''; // clear buffer |
|
| 263 |
} |
|
| 264 |
} |
|
| 265 |
return $retval; |
|
| 266 |
} // end of function importSql() |
|
| 267 |
|
|
| 268 |
} |
|
Also available in: Unified diff
- removed importSql() method from class WbDatabase
+ new class SqlImport added