|
Adodb Dokumentation
V5.14 8 Sept 2011
|
00001 <?php 00002 00013 // security - hide paths 00014 if (!defined('ADODB_DIR')) die(); 00015 00016 class ADODB2_sybase extends ADODB_DataDict { 00017 var $databaseType = 'sybase'; 00018 00019 var $dropIndex = 'DROP INDEX %2$s.%1$s'; 00020 00021 function MetaType($t,$len=-1,$fieldobj=false) 00022 { 00023 if (is_object($t)) { 00024 $fieldobj = $t; 00025 $t = $fieldobj->type; 00026 $len = $fieldobj->max_length; 00027 } 00028 00029 $len = -1; // mysql max_length is not accurate 00030 switch (strtoupper($t)) { 00031 00032 case 'INT': 00033 case 'INTEGER': return 'I'; 00034 case 'BIT': 00035 case 'TINYINT': return 'I1'; 00036 case 'SMALLINT': return 'I2'; 00037 case 'BIGINT': return 'I8'; 00038 00039 case 'REAL': 00040 case 'FLOAT': return 'F'; 00041 default: return parent::MetaType($t,$len,$fieldobj); 00042 } 00043 } 00044 00045 function ActualType($meta) 00046 { 00047 switch(strtoupper($meta)) { 00048 case 'C': return 'VARCHAR'; 00049 case 'XL': 00050 case 'X': return 'TEXT'; 00051 00052 case 'C2': return 'NVARCHAR'; 00053 case 'X2': return 'NTEXT'; 00054 00055 case 'B': return 'IMAGE'; 00056 00057 case 'D': return 'DATETIME'; 00058 case 'TS': 00059 case 'T': return 'DATETIME'; 00060 case 'L': return 'BIT'; 00061 00062 case 'I': return 'INT'; 00063 case 'I1': return 'TINYINT'; 00064 case 'I2': return 'SMALLINT'; 00065 case 'I4': return 'INT'; 00066 case 'I8': return 'BIGINT'; 00067 00068 case 'F': return 'REAL'; 00069 case 'N': return 'NUMERIC'; 00070 default: 00071 return $meta; 00072 } 00073 } 00074 00075 00076 function AddColumnSQL($tabname, $flds) 00077 { 00078 $tabname = $this->TableName ($tabname); 00079 $f = array(); 00080 list($lines,$pkey) = $this->_GenFields($flds); 00081 $s = "ALTER TABLE $tabname $this->addCol"; 00082 foreach($lines as $v) { 00083 $f[] = "\n $v"; 00084 } 00085 $s .= implode(', ',$f); 00086 $sql[] = $s; 00087 return $sql; 00088 } 00089 00090 function AlterColumnSQL($tabname, $flds) 00091 { 00092 $tabname = $this->TableName ($tabname); 00093 $sql = array(); 00094 list($lines,$pkey) = $this->_GenFields($flds); 00095 foreach($lines as $v) { 00096 $sql[] = "ALTER TABLE $tabname $this->alterCol $v"; 00097 } 00098 00099 return $sql; 00100 } 00101 00102 function DropColumnSQL($tabname, $flds) 00103 { 00104 $tabname = $this->TableName($tabname); 00105 if (!is_array($flds)) $flds = explode(',',$flds); 00106 $f = array(); 00107 $s = "ALTER TABLE $tabname"; 00108 foreach($flds as $v) { 00109 $f[] = "\n$this->dropCol ".$this->NameQuote($v); 00110 } 00111 $s .= implode(', ',$f); 00112 $sql[] = $s; 00113 return $sql; 00114 } 00115 00116 // return string must begin with space 00117 function _CreateSuffix($fname,&$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned) 00118 { 00119 $suffix = ''; 00120 if (strlen($fdefault)) $suffix .= " DEFAULT $fdefault"; 00121 if ($fautoinc) $suffix .= ' DEFAULT AUTOINCREMENT'; 00122 if ($fnotnull) $suffix .= ' NOT NULL'; 00123 else if ($suffix == '') $suffix .= ' NULL'; 00124 if ($fconstraint) $suffix .= ' '.$fconstraint; 00125 return $suffix; 00126 } 00127 00128 /* 00129 CREATE TABLE 00130 [ database_name.[ owner ] . | owner. ] table_name 00131 ( { < column_definition > 00132 | column_name AS computed_column_expression 00133 | < table_constraint > ::= [ CONSTRAINT constraint_name ] } 00134 00135 | [ { PRIMARY KEY | UNIQUE } [ ,...n ] 00136 ) 00137 00138 [ ON { filegroup | DEFAULT } ] 00139 [ TEXTIMAGE_ON { filegroup | DEFAULT } ] 00140 00141 < column_definition > ::= { column_name data_type } 00142 [ COLLATE < collation_name > ] 00143 [ [ DEFAULT constant_expression ] 00144 | [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ] 00145 ] 00146 [ ROWGUIDCOL] 00147 [ < column_constraint > ] [ ...n ] 00148 00149 < column_constraint > ::= [ CONSTRAINT constraint_name ] 00150 { [ NULL | NOT NULL ] 00151 | [ { PRIMARY KEY | UNIQUE } 00152 [ CLUSTERED | NONCLUSTERED ] 00153 [ WITH FILLFACTOR = fillfactor ] 00154 [ON {filegroup | DEFAULT} ] ] 00155 ] 00156 | [ [ FOREIGN KEY ] 00157 REFERENCES ref_table [ ( ref_column ) ] 00158 [ ON DELETE { CASCADE | NO ACTION } ] 00159 [ ON UPDATE { CASCADE | NO ACTION } ] 00160 [ NOT FOR REPLICATION ] 00161 ] 00162 | CHECK [ NOT FOR REPLICATION ] 00163 ( logical_expression ) 00164 } 00165 00166 < table_constraint > ::= [ CONSTRAINT constraint_name ] 00167 { [ { PRIMARY KEY | UNIQUE } 00168 [ CLUSTERED | NONCLUSTERED ] 00169 { ( column [ ASC | DESC ] [ ,...n ] ) } 00170 [ WITH FILLFACTOR = fillfactor ] 00171 [ ON { filegroup | DEFAULT } ] 00172 ] 00173 | FOREIGN KEY 00174 [ ( column [ ,...n ] ) ] 00175 REFERENCES ref_table [ ( ref_column [ ,...n ] ) ] 00176 [ ON DELETE { CASCADE | NO ACTION } ] 00177 [ ON UPDATE { CASCADE | NO ACTION } ] 00178 [ NOT FOR REPLICATION ] 00179 | CHECK [ NOT FOR REPLICATION ] 00180 ( search_conditions ) 00181 } 00182 00183 00184 */ 00185 00186 /* 00187 CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name 00188 ON { table | view } ( column [ ASC | DESC ] [ ,...n ] ) 00189 [ WITH < index_option > [ ,...n] ] 00190 [ ON filegroup ] 00191 < index_option > :: = 00192 { PAD_INDEX | 00193 FILLFACTOR = fillfactor | 00194 IGNORE_DUP_KEY | 00195 DROP_EXISTING | 00196 STATISTICS_NORECOMPUTE | 00197 SORT_IN_TEMPDB 00198 } 00199 */ 00200 function _IndexSQL($idxname, $tabname, $flds, $idxoptions) 00201 { 00202 $sql = array(); 00203 00204 if ( isset($idxoptions['REPLACE']) || isset($idxoptions['DROP']) ) { 00205 $sql[] = sprintf ($this->dropIndex, $idxname, $tabname); 00206 if ( isset($idxoptions['DROP']) ) 00207 return $sql; 00208 } 00209 00210 if ( empty ($flds) ) { 00211 return $sql; 00212 } 00213 00214 $unique = isset($idxoptions['UNIQUE']) ? ' UNIQUE' : ''; 00215 $clustered = isset($idxoptions['CLUSTERED']) ? ' CLUSTERED' : ''; 00216 00217 if ( is_array($flds) ) 00218 $flds = implode(', ',$flds); 00219 $s = 'CREATE' . $unique . $clustered . ' INDEX ' . $idxname . ' ON ' . $tabname . ' (' . $flds . ')'; 00220 00221 if ( isset($idxoptions[$this->upperName]) ) 00222 $s .= $idxoptions[$this->upperName]; 00223 00224 $sql[] = $s; 00225 00226 return $sql; 00227 } 00228 } 00229 ?>