Documentation TYPO3 par Ameos |
00001 <?php 00002 00013 /* 00014 In ADOdb, named quotes for MS SQL Server use ". From the MSSQL Docs: 00015 00016 Note Delimiters are for identifiers only. Delimiters cannot be used for keywords, 00017 whether or not they are marked as reserved in SQL Server. 00018 00019 Quoted identifiers are delimited by double quotation marks ("): 00020 SELECT * FROM "Blanks in Table Name" 00021 00022 Bracketed identifiers are delimited by brackets ([ ]): 00023 SELECT * FROM [Blanks In Table Name] 00024 00025 Quoted identifiers are valid only when the QUOTED_IDENTIFIER option is set to ON. By default, 00026 the Microsoft OLE DB Provider for SQL Server and SQL Server ODBC driver set QUOTED_IDENTIFIER ON 00027 when they connect. 00028 00029 In Transact-SQL, the option can be set at various levels using SET QUOTED_IDENTIFIER, 00030 the quoted identifier option of sp_dboption, or the user options option of sp_configure. 00031 00032 When SET ANSI_DEFAULTS is ON, SET QUOTED_IDENTIFIER is enabled. 00033 00034 Syntax 00035 00036 SET QUOTED_IDENTIFIER { ON | OFF } 00037 00038 00039 */ 00040 00041 // security - hide paths 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 //var $alterCol = ' ALTER COLUMN '; 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; // mysql max_length is not accurate 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 function AlterColumnSQL($tabname, $flds) 00126 { 00127 $tabname = $this->TableName ($tabname); 00128 $sql = array(); 00129 list($lines,$pkey) = $this->_GenFields($flds); 00130 foreach($lines as $v) { 00131 $sql[] = "ALTER TABLE $tabname $this->alterCol $v"; 00132 } 00133 00134 return $sql; 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 // return string must begin with space 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 CREATE TABLE 00167 [ database_name.[ owner ] . | owner. ] table_name 00168 ( { < column_definition > 00169 | column_name AS computed_column_expression 00170 | < table_constraint > ::= [ CONSTRAINT constraint_name ] } 00171 00172 | [ { PRIMARY KEY | UNIQUE } [ ,...n ] 00173 ) 00174 00175 [ ON { filegroup | DEFAULT } ] 00176 [ TEXTIMAGE_ON { filegroup | DEFAULT } ] 00177 00178 < column_definition > ::= { column_name data_type } 00179 [ COLLATE < collation_name > ] 00180 [ [ DEFAULT constant_expression ] 00181 | [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ] 00182 ] 00183 [ ROWGUIDCOL] 00184 [ < column_constraint > ] [ ...n ] 00185 00186 < column_constraint > ::= [ CONSTRAINT constraint_name ] 00187 { [ NULL | NOT NULL ] 00188 | [ { PRIMARY KEY | UNIQUE } 00189 [ CLUSTERED | NONCLUSTERED ] 00190 [ WITH FILLFACTOR = fillfactor ] 00191 [ON {filegroup | DEFAULT} ] ] 00192 ] 00193 | [ [ FOREIGN KEY ] 00194 REFERENCES ref_table [ ( ref_column ) ] 00195 [ ON DELETE { CASCADE | NO ACTION } ] 00196 [ ON UPDATE { CASCADE | NO ACTION } ] 00197 [ NOT FOR REPLICATION ] 00198 ] 00199 | CHECK [ NOT FOR REPLICATION ] 00200 ( logical_expression ) 00201 } 00202 00203 < table_constraint > ::= [ CONSTRAINT constraint_name ] 00204 { [ { PRIMARY KEY | UNIQUE } 00205 [ CLUSTERED | NONCLUSTERED ] 00206 { ( column [ ASC | DESC ] [ ,...n ] ) } 00207 [ WITH FILLFACTOR = fillfactor ] 00208 [ ON { filegroup | DEFAULT } ] 00209 ] 00210 | FOREIGN KEY 00211 [ ( column [ ,...n ] ) ] 00212 REFERENCES ref_table [ ( ref_column [ ,...n ] ) ] 00213 [ ON DELETE { CASCADE | NO ACTION } ] 00214 [ ON UPDATE { CASCADE | NO ACTION } ] 00215 [ NOT FOR REPLICATION ] 00216 | CHECK [ NOT FOR REPLICATION ] 00217 ( search_conditions ) 00218 } 00219 00220 00221 */ 00222 00223 /* 00224 CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name 00225 ON { table | view } ( column [ ASC | DESC ] [ ,...n ] ) 00226 [ WITH < index_option > [ ,...n] ] 00227 [ ON filegroup ] 00228 < index_option > :: = 00229 { PAD_INDEX | 00230 FILLFACTOR = fillfactor | 00231 IGNORE_DUP_KEY | 00232 DROP_EXISTING | 00233 STATISTICS_NORECOMPUTE | 00234 SORT_IN_TEMPDB 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 ?>