3 require_once 'Interface/DBSchema_Driver.php';
5 class MTrackDBSchema_Generic implements IMTrackDBSchema_Driver {
7 var $typemap = array();
9 function setDB(PDO $db) {
13 function determineVersion() {
14 //echo "RUNNING QUERY";
16 $q = $this->db->query('select version from mtrack_schema');
18 foreach ($q as $row) {
22 } catch (Exception $e) {
23 // print_r($e->toString());
28 function computeFieldCreate($f) {
30 $str .= isset($this->typemap[$f->type]) ? $this->typemap[$f->type] : $f->type;
31 if (isset($f->nullable) && $f->nullable == '0') {
34 if (isset($f->default)) {
35 if (!strlen($f->default)) {
36 $str .= " DEFAULT ''";
38 $str .= " DEFAULT $f->default";
44 function computeIndexCreate($table, $k) {
53 return "CREATE $kt INDEX $k->name on $table->name (" . join(', ', $k->fields) . ")";
56 function createTable(MTrackDBSchema_Table $table)
58 echo "Create $table->name\n";
63 foreach ($table->fields as $f) {
64 if ($f->type == 'autoinc') {
67 $str = $this->computeFieldCreate($f);
71 if (is_array($table->keys)) {
73 foreach ($table->keys as $k) {
74 if ($k->type != 'primary') continue;
75 if ($pri_key !== null) continue;
76 $sql[] = "\tprimary key (" . join(', ', $k->fields) . ")";
80 $sql = "CREATE TABLE $table->name (\n" .
86 $this->db->exec($sql);
88 if (is_array($table->keys)) foreach ($table->keys as $k) {
89 if ($k->type == 'primary') continue;
94 function alterTable(MTrackDBSchema_Table $from, MTrackDBSchema_Table $to)
96 /* if keys have changed, we drop the old key definitions before changing the columns */
98 echo "Need to alter $from->name\n";
99 throw new Exception("bang!");
102 function dropTable(MTrackDBSchema_Table $table)
104 echo "Drop $table->name\n";
105 $this->db->exec("drop table $table->name");