5include_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) {
547 $tableName = $this->db->getSequenceName(
$table[
'name']);
549 $tableName =
$table[
'name'];
552 $lock .= ($tableName .
' ');
555 $lock .= (
$table[
'alias'] .
' ');
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") .
")";
An exception for terminatinating execution or to throw for unit testing.
& connect($dsn, $options=false)
Create a new MDB2 connection object and connect to the specified database.
getCreateTableOptions()
Get options for the create table statement.
addFulltextIndex($a_table, $a_fields, $a_name="in")
Add fulltext index.
dropFulltextIndex($a_table, $a_name)
Add fulltext index.
getDBSlavePort()
Get slave database port.
setDBSlaveUser($a_user)
Set slave database user.
isMysql4_0OrHigher()
check wether current MySQL server is version 4.0.x or higher
groupConcat($a_field_name, $a_seperator=",", $a_order=null)
string
getDBVersion()
get mysql version
checkQuerySize($a_query)
Check query size.
getSlaveDSN()
Get slave DSN.
__buildDSN($a_host, $a_name, $a_user, $a_pass, $a_port="")
Build DSN string.
initConnection()
Initialize the database connection.
lockTables($a_tables)
Lock table.
initFromIniFile($tmpClientIniFile=null)
Init db parameters from ini file.
getDBSlaveName()
Get slave database name.
getDBSlaveHost()
Get slave database host.
setDBSlaveActive($a_val)
Set slave active.
supportsSlave()
Supports slave.
isFulltextIndex($a_table, $a_name)
Is index a fulltext index?
isMysql4_1OrHigher()
check wether current MySQL server is version 4.1.x or higher
setDBSlaveName($a_name)
Set slave database name.
getDBSlaveActive()
Get slave active.
static getReservedWords()
Get reserved words.
isMysql4_1()
check wether current MySQL server is version 4.1.x
doConnect()
Standard way to connect to db.
setDBSlavePort($a_port)
Set slave database port.
query($sql, $a_handle_error=true)
Query.Example:"SELECT * FROM data"For multiple similar queries/manipulations you may use prepare() an...
getHostDSN()
Get Host DSN.
setDBSlavePassword($a_password)
Set slave database password.
unlockTables()
Unlock tables.
setStorageEngine($a_storage_engine)
Set the storage engine.
getDBSlaveUser()
Get slave database user.
setMaxAllowedPacket()
Set maximum allowed packet size.
setDBSlaveHost($a_host)
Set slave database host.
supportsFulltext()
Is fulltext index supported?
isMysql5_6OrHigher()
check wether current MySQL server is version 5.6.x or higher
getDBSlavePassword()
Get slave database password.
getDBPort()
Get database port.
handleError($a_res, $a_info="", $a_level="")
Handle MDB2 Errors.
getDBUser()
Get database user.
getDBName()
Get database name.
constraintName($a_table, $a_constraint)
Determine contraint name by table name and constraint name.
getSubType()
Get sub type.
fetchAssoc($a_set)
Fetch row as associative array from result set.
getDBPassword()
Get database password.
substr($a_exp, $a_pos=1, $a_len=-1)
Substring.
getDBHost()
Get database host.
quote($a_query, $a_type=null)
Wrapper for quote method.
if($modEnd===false) $module
if(empty($password)) $table
foreach($_POST as $key=> $value) $res