TYPO3 CMS  TYPO3_7-6
datadict-mysql.inc.php
Go to the documentation of this file.
1 <?php
2 
15 // security - hide paths
16 if (!defined('ADODB_DIR')) die();
17 
19  var $databaseType = 'mysql';
20  var $alterCol = ' MODIFY COLUMN';
21  var $alterTableAddIndex = true;
22  var $dropTable = 'DROP TABLE IF EXISTS %s'; // requires mysql 3.22 or later
23 
24  var $dropIndex = 'DROP INDEX %s ON %s';
25  var $renameColumn = 'ALTER TABLE %s CHANGE COLUMN %s %s %s'; // needs column-definition!
26  var $blobNotNull = true;
27 
28  function MetaType($t,$len=-1,$fieldobj=false)
29  {
30  if (is_object($t)) {
31  $fieldobj = $t;
32  $t = $fieldobj->type;
33  $len = $fieldobj->max_length;
34  }
35  $is_serial = is_object($fieldobj) && $fieldobj->primary_key && $fieldobj->auto_increment;
36 
37  $len = -1; // mysql max_length is not accurate
38  switch (strtoupper($t)) {
39  case 'STRING':
40  case 'CHAR':
41  case 'VARCHAR':
42  case 'TINYBLOB':
43  case 'TINYTEXT':
44  case 'ENUM':
45  case 'SET':
46  if ($len <= $this->blobSize) return 'C';
47 
48  case 'TEXT':
49  case 'LONGTEXT':
50  case 'MEDIUMTEXT':
51  return 'X';
52 
53  // php_mysql extension always returns 'blob' even if 'text'
54  // so we have to check whether binary...
55  case 'IMAGE':
56  case 'LONGBLOB':
57  case 'BLOB':
58  case 'MEDIUMBLOB':
59  return !empty($fieldobj->binary) ? 'B' : 'X';
60 
61  case 'YEAR':
62  case 'DATE': return 'D';
63 
64  case 'TIME':
65  case 'DATETIME':
66  case 'TIMESTAMP': return 'T';
67 
68  case 'FLOAT':
69  case 'DOUBLE':
70  return 'F';
71 
72  case 'INT':
73  case 'INTEGER': return $is_serial ? 'R' : 'I';
74  case 'TINYINT': return $is_serial ? 'R' : 'I1';
75  case 'SMALLINT': return $is_serial ? 'R' : 'I2';
76  case 'MEDIUMINT': return $is_serial ? 'R' : 'I4';
77  case 'BIGINT': return $is_serial ? 'R' : 'I8';
78  default: return 'N';
79  }
80  }
81 
82  function ActualType($meta)
83  {
84  switch(strtoupper($meta)) {
85  case 'C': return 'VARCHAR';
86  case 'XL':return 'LONGTEXT';
87  case 'X': return 'TEXT';
88 
89  case 'C2': return 'VARCHAR';
90  case 'X2': return 'LONGTEXT';
91 
92  case 'B': return 'LONGBLOB';
93 
94  case 'D': return 'DATE';
95  case 'TS':
96  case 'T': return 'DATETIME';
97  case 'L': return 'TINYINT';
98 
99  case 'R':
100  case 'I4':
101  case 'I': return 'INTEGER';
102  case 'I1': return 'TINYINT';
103  case 'I2': return 'SMALLINT';
104  case 'I8': return 'BIGINT';
105 
106  case 'F': return 'DOUBLE';
107  case 'N': return 'NUMERIC';
108  default:
109  return $meta;
110  }
111  }
112 
113  // return string must begin with space
114  function _CreateSuffix($fname,&$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned)
115  {
116  $suffix = '';
117  if ($funsigned) $suffix .= ' UNSIGNED';
118  if ($fnotnull) $suffix .= ' NOT NULL';
119  if (strlen($fdefault)) $suffix .= " DEFAULT $fdefault";
120  if ($fautoinc) $suffix .= ' AUTO_INCREMENT';
121  if ($fconstraint) $suffix .= ' '.$fconstraint;
122  return $suffix;
123  }
124 
125  /*
126  CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]
127  [table_options] [select_statement]
128  create_definition:
129  col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT]
130  [PRIMARY KEY] [reference_definition]
131  or PRIMARY KEY (index_col_name,...)
132  or KEY [index_name] (index_col_name,...)
133  or INDEX [index_name] (index_col_name,...)
134  or UNIQUE [INDEX] [index_name] (index_col_name,...)
135  or FULLTEXT [INDEX] [index_name] (index_col_name,...)
136  or [CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name,...)
137  [reference_definition]
138  or CHECK (expr)
139  */
140 
141  /*
142  CREATE [UNIQUE|FULLTEXT] INDEX index_name
143  ON tbl_name (col_name[(length)],... )
144  */
145 
146  function _IndexSQL($idxname, $tabname, $flds, $idxoptions)
147  {
148  $sql = array();
149 
150  if ( isset($idxoptions['REPLACE']) || isset($idxoptions['DROP']) ) {
151  if ($this->alterTableAddIndex) $sql[] = "ALTER TABLE $tabname DROP INDEX $idxname";
152  else $sql[] = sprintf($this->dropIndex, $idxname, $tabname);
153 
154  if ( isset($idxoptions['DROP']) )
155  return $sql;
156  }
157 
158  if ( empty ($flds) ) {
159  return $sql;
160  }
161 
162  if (isset($idxoptions['FULLTEXT'])) {
163  $unique = ' FULLTEXT';
164  } elseif (isset($idxoptions['UNIQUE'])) {
165  $unique = ' UNIQUE';
166  } else {
167  $unique = '';
168  }
169 
170  if ( is_array($flds) ) $flds = implode(', ',$flds);
171 
172  if ($this->alterTableAddIndex) $s = "ALTER TABLE $tabname ADD $unique INDEX $idxname ";
173  else $s = 'CREATE' . $unique . ' INDEX ' . $idxname . ' ON ' . $tabname;
174 
175  $s .= ' (' . $flds . ')';
176 
177  if ( isset($idxoptions[$this->upperName]) )
178  $s .= $idxoptions[$this->upperName];
179 
180  $sql[] = $s;
181 
182  return $sql;
183  }
184 }
_IndexSQL($idxname, $tabname, $flds, $idxoptions)
_CreateSuffix($fname, &$ftype, $fnotnull, $fdefault, $fautoinc, $fconstraint, $funsigned)
$sql
Definition: server.php:84
MetaType($t, $len=-1, $fieldobj=false)