00001 <?php
00002
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 if (!defined('ADODB_DIR')) die();
00043
00044 class ADODB2_mssql extends ADODB_DataDict {
00045 var $databaseType = 'mssql';
00046 var $dropIndex = 'DROP INDEX %2$s.%1$s';
00047 var $renameTable = "EXEC sp_rename '%s','%s'";
00048 var $renameColumn = "EXEC sp_rename '%s.%s','%s'";
00049
00050 var $typeX = 'TEXT'; ## Alternatively, set it to VARCHAR(4000)
00051 var $typeXL = 'TEXT';
00052
00053
00054
00055 function MetaType($t,$len=-1,$fieldobj=false)
00056 {
00057 if (is_object($t)) {
00058 $fieldobj = $t;
00059 $t = $fieldobj->type;
00060 $len = $fieldobj->max_length;
00061 }
00062
00063 $len = -1;
00064 switch (strtoupper($t)) {
00065 case 'R':
00066 case 'INT':
00067 case 'INTEGER': return 'I';
00068 case 'BIT':
00069 case 'TINYINT': return 'I1';
00070 case 'SMALLINT': return 'I2';
00071 case 'BIGINT': return 'I8';
00072
00073 case 'REAL':
00074 case 'FLOAT': return 'F';
00075 default: return parent::MetaType($t,$len,$fieldobj);
00076 }
00077 }
00078
00079 function ActualType($meta)
00080 {
00081 switch(strtoupper($meta)) {
00082
00083 case 'C': return 'VARCHAR';
00084 case 'XL': return (isset($this)) ? $this->typeXL : 'TEXT';
00085 case 'X': return (isset($this)) ? $this->typeX : 'TEXT'; ## could be varchar(8000), but we want compat with oracle
00086 case 'C2': return 'NVARCHAR';
00087 case 'X2': return 'NTEXT';
00088
00089 case 'B': return 'IMAGE';
00090
00091 case 'D': return 'DATETIME';
00092 case 'T': return 'DATETIME';
00093 case 'L': return 'BIT';
00094
00095 case 'R':
00096 case 'I': return 'INT';
00097 case 'I1': return 'TINYINT';
00098 case 'I2': return 'SMALLINT';
00099 case 'I4': return 'INT';
00100 case 'I8': return 'BIGINT';
00101
00102 case 'F': return 'REAL';
00103 case 'N': return 'NUMERIC';
00104 default:
00105 return $meta;
00106 }
00107 }
00108
00109
00110 function AddColumnSQL($tabname, $flds)
00111 {
00112 $tabname = $this->TableName ($tabname);
00113 $f = array();
00114 list($lines,$pkey) = $this->_GenFields($flds);
00115 $s = "ALTER TABLE $tabname $this->addCol";
00116 foreach($lines as $v) {
00117 $f[] = "\n $v";
00118 }
00119 $s .= implode(', ',$f);
00120 $sql[] = $s;
00121 return $sql;
00122 }
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138 function DropColumnSQL($tabname, $flds)
00139 {
00140 $tabname = $this->TableName ($tabname);
00141 if (!is_array($flds))
00142 $flds = explode(',',$flds);
00143 $f = array();
00144 $s = 'ALTER TABLE ' . $tabname;
00145 foreach($flds as $v) {
00146 $f[] = "\n$this->dropCol ".$this->NameQuote($v);
00147 }
00148 $s .= implode(', ',$f);
00149 $sql[] = $s;
00150 return $sql;
00151 }
00152
00153
00154 function _CreateSuffix($fname,$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint)
00155 {
00156 $suffix = '';
00157 if (strlen($fdefault)) $suffix .= " DEFAULT $fdefault";
00158 if ($fautoinc) $suffix .= ' IDENTITY(1,1)';
00159 if ($fnotnull) $suffix .= ' NOT NULL';
00160 else if ($suffix == '') $suffix .= ' NULL';
00161 if ($fconstraint) $suffix .= ' '.$fconstraint;
00162 return $suffix;
00163 }
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237 function _IndexSQL($idxname, $tabname, $flds, $idxoptions)
00238 {
00239 $sql = array();
00240
00241 if ( isset($idxoptions['REPLACE']) || isset($idxoptions['DROP']) ) {
00242 $sql[] = sprintf ($this->dropIndex, $idxname, $tabname);
00243 if ( isset($idxoptions['DROP']) )
00244 return $sql;
00245 }
00246
00247 if ( empty ($flds) ) {
00248 return $sql;
00249 }
00250
00251 $unique = isset($idxoptions['UNIQUE']) ? ' UNIQUE' : '';
00252 $clustered = isset($idxoptions['CLUSTERED']) ? ' CLUSTERED' : '';
00253
00254 if ( is_array($flds) )
00255 $flds = implode(', ',$flds);
00256 $s = 'CREATE' . $unique . $clustered . ' INDEX ' . $idxname . ' ON ' . $tabname . ' (' . $flds . ')';
00257
00258 if ( isset($idxoptions[$this->upperName]) )
00259 $s .= $idxoptions[$this->upperName];
00260
00261
00262 $sql[] = $s;
00263
00264 return $sql;
00265 }
00266
00267
00268 function _GetSize($ftype, $ty, $fsize, $fprec)
00269 {
00270 switch ($ftype) {
00271 case 'INT':
00272 case 'SMALLINT':
00273 case 'TINYINT':
00274 case 'BIGINT':
00275 return $ftype;
00276 }
00277 if ($ty == 'T') return $ftype;
00278 return parent::_GetSize($ftype, $ty, $fsize, $fprec);
00279
00280 }
00281 }
00282 ?>