5 include_once(
"./Services/Database/classes/MDB2/class.ilDB.php");
46 $this->slave_active = $a_val;
66 $this->slave_user = $a_user;
76 return $this->slave_user;
86 $this->slave_port = $a_port;
96 return $this->slave_port;
106 $this->slave_host = $a_host;
116 return $this->slave_host;
126 $this->slave_password = $a_password;
136 return $this->slave_password;
146 $this->slave_name = $a_name;
156 return $this->slave_name;
193 protected function __buildDSN($a_host, $a_name, $a_user, $a_pass, $a_port =
"")
196 if (trim($a_port) !=
"") {
197 $db_port_str =
":" . $a_port;
200 $driver = $this->
isMySQLi() ?
"mysqli" :
"mysql";
202 return $driver .
"://" . $a_user .
":" . $a_pass .
203 "@" . $a_host . $db_port_str .
"/" . $a_name;
216 $driver = $this->
isMySQLi() ?
"mysqli" :
"mysql";
219 "@" . $this->getdbHost();
235 $storage_engine_var = ($this->
isMysql5_6OrHigher()) ?
"DEFAULT_STORAGE_ENGINE" :
"STORAGE_ENGINE";
236 $this->
query(
"SET SESSION " . $storage_engine_var .
" = '" . $a_storage_engine .
"'");
247 "ACCESSIBLE",
"ADD",
"ALL",
"ALTER",
"ANALYZE",
"AND",
248 "AS",
"ASC",
"ASENSITIVE",
"BEFORE",
"BETWEEN",
"BIGINT",
249 "BINARY",
"BLOB",
"BOTH",
"BY",
"CALL",
"CASCADE",
250 "CASE",
"CHANGE",
"CHAR",
"CHARACTER",
"CHECK",
"COLLATE",
251 "COLUMN",
"CONDITION",
"CONSTRAINT",
"CONTINUE",
"CONVERT",
"CREATE",
252 "CROSS",
"CURRENT_DATE",
"CURRENT_TIME",
"CURRENT_TIMESTAMP",
"CURRENT_USER",
"CURSOR",
253 "DATABASE",
"DATABASES",
"DAY_HOUR",
"DAY_MICROSECOND",
"DAY_MINUTE",
"DAY_SECOND",
254 "DEC",
"DECIMAL",
"DECLARE",
"DEFAULT",
"DELAYED",
"DELETE",
255 "DESC",
"DESCRIBE",
"DETERMINISTIC",
"DISTINCT",
"DISTINCTROW",
"DIV",
256 "DOUBLE",
"DROP",
"DUAL",
"EACH",
"ELSE",
"ELSEIF",
257 "ENCLOSED",
"ESCAPED",
"EXISTS",
"EXIT",
"EXPLAIN",
"FALSE",
258 "FETCH",
"FLOAT",
"FLOAT4",
"FLOAT8",
"FOR",
"FORCE",
259 "FOREIGN",
"FROM",
"FULLTEXT",
"GRANT",
"GROUP",
"HAVING",
260 "HIGH_PRIORITY",
"HOUR_MICROSECOND",
"HOUR_MINUTE",
"HOUR_SECOND",
"IF",
"IGNORE",
261 "IN",
"INDEX",
"INFILE",
"INNER",
"INOUT",
"INSENSITIVE",
262 "INSERT",
"INT",
"INT1",
"INT2",
"INT3",
"INT4",
263 "INT8",
"INTEGER",
"INTERVAL",
"INTO",
"IS",
"ITERATE",
264 "JOIN",
"KEY",
"KEYS",
"KILL",
"LEADING",
"LEAVE",
265 "LEFT",
"LIKE",
"LIMIT",
"LINEAR",
"LINES",
"LOAD",
266 "LOCALTIME",
"LOCALTIMESTAMP",
"LOCK",
"LONG",
"LONGBLOB",
"LONGTEXT",
267 "LOOP",
"LOW_PRIORITY",
"MASTER_SSL_VERIFY_SERVER_CERT",
"MATCH",
"MEDIUMBLOB",
"MEDIUMINT",
268 "MEDIUMTEXT",
"MIDDLEINT",
"MINUTE_MICROSECOND",
"MINUTE_SECOND",
"MOD",
"MODIFIES",
269 "NATURAL",
"NOT",
"NO_WRITE_TO_BINLOG",
"NULL",
"NUMERIC",
"ON",
270 "OPTIMIZE",
"OPTION",
"OPTIONALLY",
"OR",
"ORDER",
"OUT",
271 "OUTER",
"OUTFILE",
"PRECISION",
"PRIMARY",
"PROCEDURE",
"PURGE",
272 "RANGE",
"READ",
"READS",
"READ_WRITE",
"REAL",
"REFERENCES",
273 "REGEXP",
"RELEASE",
"RENAME",
"REPEAT",
"REPLACE",
"REQUIRE",
274 "RESTRICT",
"RETURN",
"REVOKE",
"RIGHT",
"RLIKE",
"SCHEMA",
275 "SCHEMAS",
"SECOND_MICROSECOND",
"SELECT",
"SENSITIVE",
"SEPARATOR",
"SET",
276 "SHOW",
"SMALLINT",
"SPATIAL",
"SPECIFIC",
"SQL",
"SQLEXCEPTION",
277 "SQLSTATE",
"SQLWARNING",
"SQL_BIG_RESULT",
"SQL_CALC_FOUND_ROWS",
"SQL_SMALL_RESULT",
"SSL",
278 "STARTING",
"STRAIGHT_JOIN",
"TABLE",
"TERMINATED",
"THEN",
"TINYBLOB",
279 "TINYINT",
"TINYTEXT",
"TO",
"TRAILING",
"TRIGGER",
"TRUE",
280 "UNDO",
"UNION",
"UNIQUE",
"UNLOCK",
"UNSIGNED",
"UPDATE",
281 "USAGE",
"USE",
"USING",
"UTC_DATE",
"UTC_TIME",
"UTC_TIMESTAMP",
282 "VALUES",
"VARBINARY",
"VARCHAR",
"VARCHARACTER",
"VARYING",
"WHEN",
283 "WHERE",
"WHILE",
"WITH",
"WRITE",
"XOR",
"YEAR_MONTH",
294 global $ilClientIniFile;
296 parent::initFromIniFile($tmpClientIniFile);
299 if (is_object($tmpClientIniFile)) {
300 $clientIniFile = $tmpClientIniFile;
302 $clientIniFile = $ilClientIniFile;
305 if (is_object($clientIniFile)) {
306 if ($clientIniFile->readVariable(
"db",
"slave_active") == 1) {
308 $this->
setDBSlaveUser($clientIniFile->readVariable(
"db",
"slave_user"));
309 $this->
setDBSlaveHost($clientIniFile->readVariable(
"db",
"slave_host"));
310 $this->
setDBSlavePort($clientIniFile->readVariable(
"db",
"slave_port"));
312 $this->
setDBSlaveName($clientIniFile->readVariable(
"db",
"slave_name"));
326 array(
"use_transactions" =>
false)
344 $this->
query(
"SET NAMES utf8");
346 $this->
query(
"SET SESSION SQL_MODE = 'ONLY_FULL_GROUP_BY'");
367 $vers = @mysql_get_server_info();
369 $vers = @mysqli_get_server_info($this->db->connection);
371 if (trim($vers) ==
"") {
446 if (strlen($a_query) >= $this->max_allowed_packet_size) {
467 ini_get(
"post_max_size");
468 $query =
"SET GLOBAL max_allowed_packet = " . (int) ini_get(
"post_max_size") * 1024 * 1024;
473 $query =
"SHOW VARIABLES LIKE 'max_allowed_packet'";
477 $this->max_allowed_packet_size =
$row->value;
497 $f_str = implode($a_fields,
",");
498 $q =
"ALTER TABLE $a_table ADD FULLTEXT $i_name ($f_str)";
508 $this->
query(
"ALTER TABLE $a_table DROP FULLTEXT $i_name");
516 $set = $this->
query(
"SHOW INDEX FROM " . $a_table);
518 if ($rec[
"Key_name"] == $a_name && $rec[
"Index_type"] ==
"FULLTEXT") {
538 $lock =
'LOCK TABLES ';
541 foreach ($a_tables as
$table) {
546 if (isset($table[
'sequence']) && $table[
'sequence']) {
547 $tableName = $this->db->getSequenceName($table[
'name']);
549 $tableName = $table[
'name'];
552 $lock .= ($tableName .
' ');
554 if ($table[
'alias']) {
555 $lock .= ($table[
'alias'] .
' ');
558 switch ($table[
'type']) {
568 if ($ilLog instanceof
ilLog) {
569 $ilLog->write(__METHOD__ .
': ' . $lock);
582 $this->
query(
'UNLOCK TABLES');
588 return array(
'type' =>
'MyISAM');
594 return mysql_errno();
596 return mysqli_errno($this->db->connection);
603 return mysql_error();
605 return mysqli_error($this->db->connection);
613 public function query($sql, $a_handle_error =
true)
616 return parent::query($sql, $a_handle_error);
619 $r = $this->slave->query($sql);
621 if ($a_handle_error) {
635 return $this->db->loadModule(
$module);
648 public function groupConcat($a_field_name, $a_seperator =
",", $a_order = null)
650 if ($a_order === null) {
651 $sql =
"GROUP_CONCAT(" . $a_field_name .
" SEPARATOR " . $this->
quote($a_seperator,
"text") .
")";
653 $sql =
"GROUP_CONCAT(" . $a_field_name .
" ORDER BY " . $a_order .
" SEPARATOR " . $this->
quote($a_seperator,
"text") .
")";
setDBSlaveUser($a_user)
Set slave database user.
setDBSlaveActive($a_val)
Set slave active.
getDBSlaveHost()
Get slave database host.
setMaxAllowedPacket()
Set maximum allowed packet size.
getDBSlaveName()
Get slave database name.
getDBSlaveActive()
Get slave active.
isMysql4_0OrHigher()
check wether current MySQL server is version 4.0.x or higher
setDBSlaveHost($a_host)
Set slave database host.
getDBSlavePort()
Get slave database port.
getDBSlaveUser()
Get slave database user.
initConnection()
Initialize the database connection.
getSubType()
Get sub type.
lockTables($a_tables)
Lock table.
supportsSlave()
Supports slave.
initFromIniFile($tmpClientIniFile=null)
Init db parameters from ini file.
setDBSlavePassword($a_password)
Set slave database password.
getDBPort()
Get database port.
getDBSlavePassword()
Get slave database password.
setDBSlavePort($a_port)
Set slave database port.
getHostDSN()
Get Host DSN.
if($modEnd===false) $module
dropFulltextIndex($a_table, $a_name)
Add fulltext index.
getDBName()
Get database name.
query($sql, $a_handle_error=true)
setStorageEngine($a_storage_engine)
Set the storage engine.
fetchAssoc($a_set)
Fetch row as associative array from result set.
quote($a_query, $a_type=null)
Wrapper for quote method.
getDBHost()
Get database host.
setDBSlaveName($a_name)
Set slave database name.
substr($a_exp, $a_pos=1, $a_len=-1)
Substring.
foreach($_POST as $key=> $value) $res
supportsFulltext()
Is fulltext index supported?
getDBUser()
Get database user.
& connect($dsn, $options=false)
Create a new MDB2 connection object and connect to the specified database.
static getReservedWords()
Get reserved words.
__buildDSN($a_host, $a_name, $a_user, $a_pass, $a_port="")
Build DSN string.
doConnect()
Standard way to connect to db.
handleError($a_res, $a_info="", $a_level="")
Handle MDB2 Errors.
Create styles array
The data for the language used.
unlockTables()
Unlock tables.
groupConcat($a_field_name, $a_seperator=",", $a_order=null)
string
constraintName($a_table, $a_constraint)
Determine contraint name by table name and constraint name.
isFulltextIndex($a_table, $a_name)
Is index a fulltext index?
isMysql4_1OrHigher()
check wether current MySQL server is version 4.1.x or higher
getSlaveDSN()
Get slave DSN.
getDBPassword()
Get database password.
if(empty($password)) $table
checkQuerySize($a_query)
Check query size.
addFulltextIndex($a_table, $a_fields, $a_name="in")
Add fulltext index.
isMysql5_6OrHigher()
check wether current MySQL server is version 5.6.x or higher
getDBVersion()
get mysql version
isMysql4_1()
check wether current MySQL server is version 4.1.x