Adodb Dokumentation  V5.14 8 Sept 2011
datadict/datadict-sybase.inc.php
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 ?>