|
Adodb Dokumentation
V5.14 8 Sept 2011
|
00001 <?php 00002 /* 00003 00004 V4.81 3 May 2006 (c) 2000-2011 John Lim (jlim#natsoft.com). All rights reserved. 00005 Released under both BSD license and Lesser GPL library license. 00006 Whenever there is any discrepancy between the two licenses, 00007 the BSD license will take precedence. 00008 00009 Set tabs to 4 for best viewing. 00010 00011 */ 00012 00013 error_reporting(E_ALL); 00014 include_once('../adodb.inc.php'); 00015 00016 foreach(array('sapdb','sybase','mysql','access','oci8po','odbc_mssql','odbc','db2','firebird','postgres','informix') as $dbType) { 00017 echo "<h3>$dbType</h3><p>"; 00018 $db = NewADOConnection($dbType); 00019 $dict = NewDataDictionary($db); 00020 00021 if (!$dict) continue; 00022 $dict->debug = 1; 00023 00024 $opts = array('REPLACE','mysql' => 'ENGINE=INNODB', 'oci8' => 'TABLESPACE USERS'); 00025 00026 /* $flds = array( 00027 array('id', 'I', 00028 'AUTO','KEY'), 00029 00030 array('name' => 'firstname', 'type' => 'varchar','size' => 30, 00031 'DEFAULT'=>'Joan'), 00032 00033 array('lastname','varchar',28, 00034 'DEFAULT'=>'Chen','key'), 00035 00036 array('averylonglongfieldname','X',1024, 00037 'NOTNULL','default' => 'test'), 00038 00039 array('price','N','7.2', 00040 'NOTNULL','default' => '0.00'), 00041 00042 array('MYDATE', 'D', 00043 'DEFDATE'), 00044 array('TS','T', 00045 'DEFTIMESTAMP') 00046 );*/ 00047 00048 $flds = " 00049 ID I AUTO KEY, 00050 FIRSTNAME VARCHAR(30) DEFAULT 'Joan' INDEX idx_name, 00051 LASTNAME VARCHAR(28) DEFAULT 'Chen' key INDEX idx_name INDEX idx_lastname, 00052 averylonglongfieldname X(1024) DEFAULT 'test', 00053 price N(7.2) DEFAULT '0.00', 00054 MYDATE D DEFDATE INDEX idx_date, 00055 BIGFELLOW X NOTNULL, 00056 TS_SECS T DEFTIMESTAMP, 00057 TS_SUBSEC TS DEFTIMESTAMP 00058 "; 00059 00060 00061 $sqla = $dict->CreateDatabase('KUTU',array('postgres'=>"LOCATION='/u01/postdata'")); 00062 $dict->SetSchema('KUTU'); 00063 00064 $sqli = ($dict->CreateTableSQL('testtable',$flds, $opts)); 00065 $sqla = array_merge($sqla,$sqli); 00066 00067 $sqli = $dict->CreateIndexSQL('idx','testtable','price,firstname,lastname',array('BITMAP','FULLTEXT','CLUSTERED','HASH')); 00068 $sqla = array_merge($sqla,$sqli); 00069 $sqli = $dict->CreateIndexSQL('idx2','testtable','price,lastname');//,array('BITMAP','FULLTEXT','CLUSTERED')); 00070 $sqla = array_merge($sqla,$sqli); 00071 00072 $addflds = array(array('height', 'F'),array('weight','F')); 00073 $sqli = $dict->AddColumnSQL('testtable',$addflds); 00074 $sqla = array_merge($sqla,$sqli); 00075 $addflds = array(array('height', 'F','NOTNULL'),array('weight','F','NOTNULL')); 00076 $sqli = $dict->AlterColumnSQL('testtable',$addflds); 00077 $sqla = array_merge($sqla,$sqli); 00078 00079 00080 printsqla($dbType,$sqla); 00081 00082 if (file_exists('d:\inetpub\wwwroot\php\phplens\adodb\adodb.inc.php')) 00083 if ($dbType == 'mysqlt') { 00084 $db->Connect('localhost', "root", "", "test"); 00085 $dict->SetSchema(''); 00086 $sqla2 = $dict->ChangeTableSQL('adoxyz',$flds); 00087 if ($sqla2) printsqla($dbType,$sqla2); 00088 } 00089 if ($dbType == 'postgres') { 00090 if (@$db->Connect('localhost', "tester", "test", "test")); 00091 $dict->SetSchema(''); 00092 $sqla2 = $dict->ChangeTableSQL('adoxyz',$flds); 00093 if ($sqla2) printsqla($dbType,$sqla2); 00094 } 00095 00096 if ($dbType == 'odbc_mssql') { 00097 $dsn = $dsn = "PROVIDER=MSDASQL;Driver={SQL Server};Server=localhost;Database=northwind;"; 00098 if (@$db->Connect($dsn, "sa", "natsoft", "test")); 00099 $dict->SetSchema(''); 00100 $sqla2 = $dict->ChangeTableSQL('adoxyz',$flds); 00101 if ($sqla2) printsqla($dbType,$sqla2); 00102 } 00103 00104 00105 00106 adodb_pr($dict->databaseType); 00107 printsqla($dbType, $dict->DropColumnSQL('table',array('my col','`col2_with_Quotes`','A_col3','col3(10)'))); 00108 printsqla($dbType, $dict->ChangeTableSQL('adoxyz','LASTNAME varchar(32)')); 00109 00110 } 00111 00112 function printsqla($dbType,$sqla) 00113 { 00114 print "<pre>"; 00115 //print_r($dict->MetaTables()); 00116 foreach($sqla as $s) { 00117 $s = htmlspecialchars($s); 00118 print "$s;\n"; 00119 if ($dbType == 'oci8') print "/\n"; 00120 } 00121 print "</pre><hr />"; 00122 } 00123 00124 /*** 00125 00126 Generated SQL: 00127 00128 mysql 00129 00130 CREATE DATABASE KUTU; 00131 DROP TABLE KUTU.testtable; 00132 CREATE TABLE KUTU.testtable ( 00133 id INTEGER NOT NULL AUTO_INCREMENT, 00134 firstname VARCHAR(30) DEFAULT 'Joan', 00135 lastname VARCHAR(28) NOT NULL DEFAULT 'Chen', 00136 averylonglongfieldname LONGTEXT NOT NULL, 00137 price NUMERIC(7,2) NOT NULL DEFAULT 0.00, 00138 MYDATE DATE DEFAULT CURDATE(), 00139 PRIMARY KEY (id, lastname) 00140 )TYPE=ISAM; 00141 CREATE FULLTEXT INDEX idx ON KUTU.testtable (firstname,lastname); 00142 CREATE INDEX idx2 ON KUTU.testtable (price,lastname); 00143 ALTER TABLE KUTU.testtable ADD height DOUBLE; 00144 ALTER TABLE KUTU.testtable ADD weight DOUBLE; 00145 ALTER TABLE KUTU.testtable MODIFY COLUMN height DOUBLE NOT NULL; 00146 ALTER TABLE KUTU.testtable MODIFY COLUMN weight DOUBLE NOT NULL; 00147 00148 00149 -------------------------------------------------------------------------------- 00150 00151 oci8 00152 00153 CREATE USER KUTU IDENTIFIED BY tiger; 00154 / 00155 GRANT CREATE SESSION, CREATE TABLE,UNLIMITED TABLESPACE,CREATE SEQUENCE TO KUTU; 00156 / 00157 DROP TABLE KUTU.testtable CASCADE CONSTRAINTS; 00158 / 00159 CREATE TABLE KUTU.testtable ( 00160 id NUMBER(16) NOT NULL, 00161 firstname VARCHAR(30) DEFAULT 'Joan', 00162 lastname VARCHAR(28) DEFAULT 'Chen' NOT NULL, 00163 averylonglongfieldname CLOB NOT NULL, 00164 price NUMBER(7,2) DEFAULT 0.00 NOT NULL, 00165 MYDATE DATE DEFAULT TRUNC(SYSDATE), 00166 PRIMARY KEY (id, lastname) 00167 )TABLESPACE USERS; 00168 / 00169 DROP SEQUENCE KUTU.SEQ_testtable; 00170 / 00171 CREATE SEQUENCE KUTU.SEQ_testtable; 00172 / 00173 CREATE OR REPLACE TRIGGER KUTU.TRIG_SEQ_testtable BEFORE insert ON KUTU.testtable 00174 FOR EACH ROW 00175 BEGIN 00176 select KUTU.SEQ_testtable.nextval into :new.id from dual; 00177 END; 00178 / 00179 CREATE BITMAP INDEX idx ON KUTU.testtable (firstname,lastname); 00180 / 00181 CREATE INDEX idx2 ON KUTU.testtable (price,lastname); 00182 / 00183 ALTER TABLE testtable ADD ( 00184 height NUMBER, 00185 weight NUMBER); 00186 / 00187 ALTER TABLE testtable MODIFY( 00188 height NUMBER NOT NULL, 00189 weight NUMBER NOT NULL); 00190 / 00191 00192 00193 -------------------------------------------------------------------------------- 00194 00195 postgres 00196 AlterColumnSQL not supported for PostgreSQL 00197 00198 00199 CREATE DATABASE KUTU LOCATION='/u01/postdata'; 00200 DROP TABLE KUTU.testtable; 00201 CREATE TABLE KUTU.testtable ( 00202 id SERIAL, 00203 firstname VARCHAR(30) DEFAULT 'Joan', 00204 lastname VARCHAR(28) DEFAULT 'Chen' NOT NULL, 00205 averylonglongfieldname TEXT NOT NULL, 00206 price NUMERIC(7,2) DEFAULT 0.00 NOT NULL, 00207 MYDATE DATE DEFAULT CURRENT_DATE, 00208 PRIMARY KEY (id, lastname) 00209 ); 00210 CREATE INDEX idx ON KUTU.testtable USING HASH (firstname,lastname); 00211 CREATE INDEX idx2 ON KUTU.testtable (price,lastname); 00212 ALTER TABLE KUTU.testtable ADD height FLOAT8; 00213 ALTER TABLE KUTU.testtable ADD weight FLOAT8; 00214 00215 00216 -------------------------------------------------------------------------------- 00217 00218 odbc_mssql 00219 00220 CREATE DATABASE KUTU; 00221 DROP TABLE KUTU.testtable; 00222 CREATE TABLE KUTU.testtable ( 00223 id INT IDENTITY(1,1) NOT NULL, 00224 firstname VARCHAR(30) DEFAULT 'Joan', 00225 lastname VARCHAR(28) DEFAULT 'Chen' NOT NULL, 00226 averylonglongfieldname TEXT NOT NULL, 00227 price NUMERIC(7,2) DEFAULT 0.00 NOT NULL, 00228 MYDATE DATETIME DEFAULT GetDate(), 00229 PRIMARY KEY (id, lastname) 00230 ); 00231 CREATE CLUSTERED INDEX idx ON KUTU.testtable (firstname,lastname); 00232 CREATE INDEX idx2 ON KUTU.testtable (price,lastname); 00233 ALTER TABLE KUTU.testtable ADD 00234 height REAL, 00235 weight REAL; 00236 ALTER TABLE KUTU.testtable ALTER COLUMN height REAL NOT NULL; 00237 ALTER TABLE KUTU.testtable ALTER COLUMN weight REAL NOT NULL; 00238 00239 00240 -------------------------------------------------------------------------------- 00241 */ 00242 00243 00244 echo "<h1>Test XML Schema</h1>"; 00245 $ff = file('xmlschema.xml'); 00246 echo "<pre>"; 00247 foreach($ff as $xml) echo htmlspecialchars($xml); 00248 echo "</pre>"; 00249 include_once('test-xmlschema.php'); 00250 ?>