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