} else {
$dsn='sqlsrv:Server='.$host.';Database='.$name;
}
- break;
+ break;
default:
return false;
}
$query = self::processQuery( $query );
self::connect();
-
+
if ($isManipulation === null) {
//try to guess, so we return the number of rows on manipulations
$isManipulation = self::isManipulation($query);
}
-
+
// return the result
if(self::$backend==self::BACKEND_MDB2) {
// differentiate between query and manipulation
}
return $result;
}
-
+
/**
* tries to guess the type of statement based on the first 10 characters
* the current check allows some whitespace but does not work with IF EXISTS or other more complex statements
- *
+ *
* @param string $sql
*/
static public function isManipulation( $sql ) {
}
return false;
}
-
+
/**
* @brief gets last value of autoincrement
* @param string $table The optional table name (will replace *PREFIX*) and add sequence suffix
$CONFIG_DBTYPE = OC_Config::getValue( "dbtype", "sqlite" );
self::connectScheme();
-
+
if(OC_Config::getValue('dbtype', 'sqlite')==='oci') {
//set dbname, it is unset because oci uses 'service' to connect
self::$schema->db->database_name=self::$schema->db->dsn['username'];
+
+ $installedVersion = \OC_Config::getValue('version', '0.0.0');
+ if (version_compare('5.0.15', $installedVersion, '<=')) {
+ //configvalue in oc_appconfig must be allowed to contain NULL
+ //because it is a CLOB, we need to move heaven and earth a bit
+ //i.e. rename it and copy values
+ $ociHandleAppconfig = true;
+
+ $query = \OCP\DB::prepare('SELECT * FROM `*PREFIX*appconfig`');
+ $result = $query->execute();
+ if(\OCP\DB::isError($result)) {
+ unset($ociHandleAppconfig);
+ throw new Exception('Cannot read from table appconfig:'.
+ $result->getMessage());
+ }
+ $ociAppconfigContent = $result->fetchAll();
+
+ $query = \OCP\DB::prepare('ALTER TABLE `*PREFIX*appconfig`
+ RENAME COLUMN `configvalue` TO `configvalue_tmp`');
+ $result = $query->execute();
+ if(\OCP\DB::isError($result)) {
+ OC_Log::write('core', 'Could not alter appconfig.'.
+ ', DB upgrade may fail.', OC_Log::WARN);
+ }
+ }
}
// read file
OC_Log::write('core', $message, OC_Log::FATAL);
throw new Exception($message);
}
+
+ if(isset($ociHandleAppconfig) && isset($ociAppconfigContent)) {
+ $query = \OCP\DB::prepare('
+ UPDATE `*PREFIX*appconfig`
+ SET `configvalue` = ?
+ WHERE
+ `appid` = ?
+ AND `configkey` = ?
+ ');
+ foreach($ociAppconfigContent as $row) {
+ $r = $query->execute(array(
+ $row['configvalue'], $row['appid'], $row['configkey']
+ ));
+ if(\OCP\DB::isError($r)) {
+ throw new Exception($r->getMessage());
+ }
+ }
+ }
+
return true;
}
private static function fixLimitClauseForMSSQL($query) {
$limitLocation = stripos ($query, "LIMIT");
-
+
if ( $limitLocation === false ) {
return $query;
- }
-
+ }
+
// total == 0 means all results - not zero results
//
// First number is either total or offset, locate it by first space
}
return $query;
}
-
+
/**
* @brief drop a table
* @param string $tableName the table to drop
} else {
$result = $this->statement->execute();
}
-
+
if ($result === false) {
return false;
}
die ($entry);
}
}
-
+
/**
* provide numRows
*/