summaryrefslogtreecommitdiff
path: root/lib/mysql.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mysql.php')
-rw-r--r--lib/mysql.php90
1 files changed, 90 insertions, 0 deletions
diff --git a/lib/mysql.php b/lib/mysql.php
new file mode 100644
index 0000000..19d0dae
--- /dev/null
+++ b/lib/mysql.php
@@ -0,0 +1,90 @@
+<?php
+
+# do not include twice
+if (isset($mysql))
+ return;
+
+require_once "../init.php";
+include_once BASE . "/lib/http.php";
+include_once BASE . "/lib/mysql-joins.php";
+
+$mysql = new mysqli("localhost", "webserver", "empty", "buildmaster");
+if ( $mysql -> connect_error ) {
+ die_500( "Connection failed: " . $mysql -> connect_error );
+}
+
+function print_important_trace_components($call) {
+ return substr($call['file'], strlen(BASE)+1) . '(' . $call['line'] . ')';
+}
+
+function mysql_log_duration_and_trace($start) {
+ $start = round((microtime(true) - $start) * 1000000);
+ $trace = debug_backtrace();
+ array_shift($trace);
+ // silently fail if logfile is unavailable
+ if (($fp = fopen(BASE . '/log', 'a')) !== false) {
+ flock($fp, LOCK_EX);
+ fwrite($fp,
+ date('Y-m-d H:i:s') . " " .
+ $start . " " .
+ implode(' ', array_map('print_important_trace_components', $trace)) . " - " .
+ $trace[0]['args'][0] . "\n"
+ );
+ flock($fp, LOCK_UN);
+ fclose($fp);
+ }
+}
+
+function mysql_run_query($query) {
+ global $mysql;
+ $start = microtime(true);
+ if ( ! $result = $mysql -> query($query) )
+ die_500( "Query failed: " . $mysql -> error );
+ mysql_log_duration_and_trace($start);
+ return $result;
+}
+
+function mysql_prepare_query($query) {
+ global $mysql;
+ $start = microtime(true);
+ if ( ! $result = $mysql -> prepare($query) )
+ die_500( "Prepare failed: " . $mysql -> error );
+ mysql_log_duration_and_trace($start);
+ return $result;
+}
+
+function show_warning_on_offline_slave() {
+ $result = mysql_run_query("SHOW STATUS LIKE \"Slave_running\"");
+ if (($result -> num_rows == 0) ||
+ ($result -> fetch_assoc() ["Value"] != "ON")) {
+ print "<div><font color=\"ff0000\">The replication slave is currently not running. The database might be outdated.</font></div>\n";
+ }
+}
+
+function mysql_url_encode($input) {
+ return
+ "REPLACE(" . $input . ",\"+\",\"%2B\")";
+}
+
+function mysql_query_package_version($table) {
+ return
+ "CONCAT(" .
+ "IF(" .
+ "`" .$table . "`.`epoch`=\"0\"," .
+ "\"\"," .
+ "CONCAT(" .
+ "`" . $table . "`.`epoch`," .
+ "\":\"" .
+ ")" .
+ ")," .
+ "`" . $table . "`.`pkgver`,\"-\"," .
+ "`" . $table . "`.`pkgrel`," .
+ "IF(`" . $table . "`.`sub_pkgrel_omitted`," .
+ "\"\"," .
+ "CONCAT(" .
+ "\".\"," .
+ "`" . $table . "`.`sub_pkgrel`" .
+ ")" .
+ ")" .
+ ")";
+}