3 require_once 'MTrack/Interface/DBExtension.php';
4 require_once 'MTrack/Config.php';
8 static $extensions = array();
10 static $query_strings = array();
12 static function registerExtension(IMTrackDBExtension $ext) {
13 self::$extensions[] = $ext;
16 // given a unix timestamp, return a value timestamp string
17 // suitable for use with the database
18 static function unixtime($unix)
20 list($unix) = explode('.', $unix, 2);
25 throw new Exception("unix time $unix is too small\n");
27 $d = date_create("@$unix", new DateTimeZone('UTC'));
28 // 2008-12-22T05:42:42.285445Z
30 throw new Exception("failed to create date for time $unix");
32 return $d->format('Y-m-d\TH:i:s.u\Z');
38 if (self::$db != null) {
43 $dsn = MTrackConfig::get('core', 'dsn');
44 $user = MTrackConfig::get('core', 'dsnuser');
45 $pass = MTrackConfig::get('core', 'dsnpassword');
47 $dsn = 'sqlite:' . MTrackConfig::get('core', 'dblocation');
49 $db = new PDO($dsn, $user, $pass);
50 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
53 if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'sqlite') {
55 $db->sqliteCreateAggregate('mtrack_group_concat',
56 array('MTrackDB', 'group_concat_step'),
57 array('MTrackDB', 'group_concat_final'));
59 $db->sqliteCreateFunction('mtrack_cleanup_attachments',
60 array('MTrackAttachment', 'attachment_row_deleted'));
63 foreach (self::$extensions as $ext) {
64 $ext->onHandleCreated($db);
70 static function lastInsertId($tablename, $keyfield) {
71 if (!strlen($tablename) || !strlen($keyfield)) {
72 throw new Exception("missing tablename or keyfield");
74 if (self::$db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'pgsql') {
75 return self::$db->lastInsertId($tablename . '_' . $keyfield . '_seq');
77 return self::$db->lastInsertId();
82 // bit like stored procs in SQLITE..
83 static function group_concat_step($context, $rownum, $value)
85 if (!is_array($context)) {
91 static function group_concat_final($context, $rownum)
93 if ($context === null) {
97 return join(", ", $context);
100 static function esc($str) // escape..
102 return "'" . str_replace("'", "''", $str) . "'";
105 /* issue a query, passing optional parameters */
106 static function q($sql) {
108 if (isset(self::$query_strings[$sql])) {
109 self::$query_strings[$sql]++;
111 self::$query_strings[$sql] = 1;
113 $params = func_get_args();
114 array_shift($params);
116 # echo "<br>SQL: $sql\n";
120 if (count($params)) {
121 $q = $db->prepare($sql);
122 $q->execute($params);
124 $q = $db->query($sql);
126 } catch (Exception $e) {
127 echo $e->getMessage();