Subversion Repositories PHPX

Rev

Rev 68 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 68 Rev 73
1
<?php
1
<?php
2
2
3
namespace PointedEars\PHPX\Db;
3
namespace PointedEars\PHPX\Db;
4
4
5
class MySQLDB extends Database
5
class MySQLDB extends Database
6
{
6
{
7
  /**
7
  /**
8
   * Database host
8
   * Database host
9
   * @var string
9
   * @var string
10
   */
10
   */
11
  protected $_host;
11
  protected $_host;
12
12
13
  /**
13
  /**
14
   * Database port on the host
14
   * Database port on the host
15
   * @var int
15
   * @var int
16
   */
16
   */
17
  protected $_port;
17
  protected $_port;
18
18
19
  /**
19
  /**
20
   * MySQL Unix socket (shouldn't be used with host or port).
20
   * MySQL Unix socket (shouldn't be used with host or port).
21
   * @var string
21
   * @var string
22
   */
22
   */
23
  protected $_unix_socket;
23
  protected $_unix_socket;
24
24
25
  /**
25
  /**
26
  * Database name
26
  * Database name
27
  * @var string
27
  * @var string
28
  */
28
  */
29
  protected $_dbname;
29
  protected $_dbname;
30
30
31
  /**
31
  /**
32
   * Username to access the database
32
   * Username to access the database
33
   * @var string
33
   * @var string
34
   */
34
   */
35
  protected $_username;
35
  protected $_username;
36
36
37
  /**
37
  /**
38
   * Password to access the database
38
   * Password to access the database
39
   * @var string
39
   * @var string
40
   */
40
   */
41
  protected $_password;
41
  protected $_password;
42
42
43
  /**
43
  /**
44
   * Optional charset parameter value
44
   * Optional charset parameter value
45
   * @var string
45
   * @var string
46
   */
46
   */
47
  protected $_charset = null;
47
  protected $_charset = null;
48
48
49
  /**
49
  /**
50
   * (non-PHPdoc)
50
   * (non-PHPdoc)
51
   * @see Database::_leftQuote
51
   * @see Database::_leftQuote
52
   */
52
   */
53
    protected $_leftQuote = '`';
53
    protected $_leftQuote = '`';
54
54
55
  /**
55
  /**
56
   * (non-PHPdoc)
56
   * (non-PHPdoc)
57
   * @see Database::_rightQuote
57
   * @see Database::_rightQuote
58
   */
58
   */
59
  protected $_rightQuote = '`';
59
  protected $_rightQuote = '`';
60
60
61
  public function __construct()
61
  public function __construct()
62
  {
62
  {
63
        $dbconfig = $this->readConfig();
63
        $dbconfig = $this->readConfig();
64
        if ($dbconfig === false)
64
        if ($dbconfig === false)
65
        {
65
        {
66
          return;
66
          return;
67
        }
67
        }
68
68
69
        if (isset($dbconfig['unix_socket']))
69
        if (isset($dbconfig['unix_socket']))
70
        {
70
        {
71
          $this->_unix_socket = $dbconfig['unix_socket'];
71
          $this->_unix_socket = $dbconfig['unix_socket'];
72
        }
72
        }
73
73
74
    $this->_dsn = "mysql:host={$this->_host}"
74
    $this->_dsn = "mysql:host={$this->_host}"
75
      . (!is_null($this->_port) ? ";port={$this->_port}" : '')
75
      . (!is_null($this->_port) ? ";port={$this->_port}" : '')
76
      . (!is_null($this->_unix_socket) ? ";unix_socket={$this->_unix_socket}" : '')
76
      . (!is_null($this->_unix_socket) ? ";unix_socket={$this->_unix_socket}" : '')
77
      . (!is_null($this->_dbname) ? ";dbname={$this->_dbname}" : '')
77
      . (!is_null($this->_dbname) ? ";dbname={$this->_dbname}" : '')
78
      . (!is_null($this->_charset) ? ";charset={$this->_charset}" : '');
78
      . (!is_null($this->_charset) ? ";charset={$this->_charset}" : '');
79
79
80
    if (!is_null($this->_charset))
80
    if (!is_null($this->_charset))
81
    {
81
    {
82
      $this->_options[\PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES " . $this->_charset;
82
      $this->_options[\PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES " . $this->_charset;
83
    }
83
    }
84
84
85
    parent::__construct();
85
    parent::__construct();
86
  }
86
  }
87
87
88
  /**
88
  /**
89
   * (non-PHPdoc)
89
   * (non-PHPdoc)
90
   * @see \PointedEars\PHPX\Db\Database::_columnDef()
90
   * @see \PointedEars\PHPX\Db\Database::_columnDef()
91
   */
91
   */
92
  protected function _columnDef (array $data, $columnName)
92
  protected function _columnDef (array $data, $columnName)
93
  {
93
  {
94
        $standard_Def = parent::_columnDef($data, $columnName);
94
        $standard_Def = parent::_columnDef($data, $columnName);
95
        $mySQL_def = $standardDef
95
        $mySQL_def = $standardDef
96
        . (isset($data['format'])  && $data['format']  ? " COLUMN_FORMAT {$data['format']}" : '')
96
        . (isset($data['format'])  && $data['format']  ? " COLUMN_FORMAT {$data['format']}" : '')
97
                  . (isset($data['storage']) && $data['storage'] ? " STORAGE {$data['storage']}"      : '');
97
                  . (isset($data['storage']) && $data['storage'] ? " STORAGE {$data['storage']}"      : '');
98
98
99
        return $mySQL_def;
99
        return $mySQL_def;
100
  }
100
  }
101
101
102
  /**
102
  /**
103
   * Creates this MySQL database
103
   * Creates this MySQL database
104
   *
104
   *
105
   * @param string $dsn
105
   * @param string $dsn
106
   *   Ignored.  Required for strict compatibility only.
106
   *   Ignored.  Required for strict compatibility only.
107
   * @param string $username = null
107
   * @param string $username = null
108
   * @param string $password = null
108
   * @param string $password = null
109
   * @param array? $options = null
109
   * @param array? $options = null
110
   *   Ignored.  Required for strict compatibility only.
110
   *   Ignored.  Required for strict compatibility only.
111
   * @param string $dbspec = null
111
   * @param string $dbspec = null
112
   *   Currently ignored.
112
   *   Currently ignored.
113
   * @param boolean $force = false
113
   * @param boolean $force = false
114
   * @see Database::create()
114
   * @see Database::create()
115
   */
115
   */
116
  public function create ($dsn, $username = null, $password = null,
116
  public function create ($dsn, $username = null, $password = null,
117
    array $options = null, $dbspec = null, $force = false)
117
    array $options = null, $dbspec = null, $force = false)
118
  {
118
  {
119
    return parent::create(
119
    return parent::create(
120
      "mysql:host={$this->_host}"
120
      "mysql:host={$this->_host}"
121
      . (!is_null($this->_charset) ? ";charset={$this->_charset}" : ''),
121
      . (!is_null($this->_charset) ? ";charset={$this->_charset}" : ''),
122
      $username, $password, null, $force);
122
      $username, $password, null, $force);
123
  }
123
  }
-
 
124
-
 
125
  /**
-
 
126
   * Returns the date of last modification of this database or
-
 
127
   * one of its tables.
-
 
128
   *
-
 
129
   * @param string $table (optional)
-
 
130
   *   Table name.  If not provided, all tables of this database
-
 
131
   *   are considered.
-
 
132
   * @return int|null
-
 
133
   *   Timestamp of last modification, or <code>null</code> if
-
 
134
   *   unavailable.
-
 
135
   */
-
 
136
  public function getLastModified ($table = null)
-
 
137
  {
-
 
138
    $filter = array('TABLE_SCHEMA' => $this->_dbname);
-
 
139
-
 
140
    if ($table !== null)
-
 
141
    {
-
 
142
      $filter['TABLE_NAME'] = $table;
-
 
143
    }
-
 
144
-
 
145
    $times = $this->select(
-
 
146
      '`information_schema`.`tables`',
-
 
147
      array('CREATE_TIME', 'UPDATE_TIME'),
-
 
148
      $filter,
-
 
149
      array('UPDATE_TIME DESC', 'CREATE_TIME DESC'),
-
 
150
      1
-
 
151
    );
-
 
152
-
 
153
    $modi = ($times ? $times[0] : null);
-
 
154
-
 
155
    if ($modi)
-
 
156
    {
-
 
157
      $modi = $modi['UPDATE_TIME'] ?: $modi['CREATE_TIME'];
-
 
158
-
 
159
      if ($modi)
-
 
160
      {
-
 
161
        $modi = strtotime($modi . ' GMT');
-
 
162
      }
-
 
163
    }
-
 
164
-
 
165
    return $modi;
-
 
166
  }
124
}
167
}
125
168