[2] | 1 | <?php |
---|
| 2 | /* |
---|
| 3 | |
---|
[34] | 4 | V4.81 3 May 2006 (c) 2000-2007 John Lim (jlim#natsoft.com.my). All rights reserved. |
---|
[2] | 5 | Released under both BSD license and Lesser GPL library license. |
---|
| 6 | Whenever there is any discrepancy between the two licenses, |
---|
| 7 | the BSD license will take precedence. |
---|
| 8 | |
---|
| 9 | Set tabs to 4 for best viewing. |
---|
| 10 | |
---|
| 11 | */ |
---|
| 12 | |
---|
| 13 | error_reporting(E_ALL); |
---|
| 14 | include_once('../adodb.inc.php'); |
---|
| 15 | |
---|
[34] | 16 | foreach(array('sapdb','sybase','mysql','access','oci8po','postgres','odbc_mssql','odbc','db2','firebird','informix') as $dbType) { |
---|
[2] | 17 | echo "<h3>$dbType</h3><p>"; |
---|
| 18 | $db = NewADOConnection($dbType); |
---|
| 19 | $dict = NewDataDictionary($db); |
---|
| 20 | |
---|
| 21 | if (!$dict) continue; |
---|
| 22 | $dict->debug = 1; |
---|
| 23 | |
---|
[34] | 24 | $opts = array('REPLACE','mysql' => 'ENGINE=INNODB', 'oci8' => 'TABLESPACE USERS'); |
---|
[2] | 25 | |
---|
| 26 | /* $flds = array( |
---|
| 27 | array('id', 'I', |
---|
| 28 | 'AUTO','KEY'), |
---|
| 29 | |
---|
| 30 | array('name' => 'firstname', 'type' => 'varchar','size' => 30, |
---|
| 31 | 'DEFAULT'=>'Joan'), |
---|
| 32 | |
---|
| 33 | array('lastname','varchar',28, |
---|
| 34 | 'DEFAULT'=>'Chen','key'), |
---|
| 35 | |
---|
| 36 | array('averylonglongfieldname','X',1024, |
---|
| 37 | 'NOTNULL','default' => 'test'), |
---|
| 38 | |
---|
| 39 | array('price','N','7.2', |
---|
| 40 | 'NOTNULL','default' => '0.00'), |
---|
| 41 | |
---|
| 42 | array('MYDATE', 'D', |
---|
| 43 | 'DEFDATE'), |
---|
| 44 | array('TS','T', |
---|
| 45 | 'DEFTIMESTAMP') |
---|
| 46 | );*/ |
---|
| 47 | |
---|
| 48 | $flds = " |
---|
| 49 | ID I AUTO KEY, |
---|
[34] | 50 | FIRSTNAME VARCHAR(30) DEFAULT 'Joan' INDEX idx_name, |
---|
| 51 | LASTNAME VARCHAR(28) DEFAULT 'Chen' key INDEX idx_name, |
---|
[2] | 52 | averylonglongfieldname X(1024) DEFAULT 'test', |
---|
| 53 | price N(7.2) DEFAULT '0.00', |
---|
[34] | 54 | MYDATE D DEFDATE INDEX idx_date, |
---|
[2] | 55 | BIGFELLOW X NOTNULL, |
---|
| 56 | TS T DEFTIMESTAMP"; |
---|
| 57 | |
---|
| 58 | |
---|
| 59 | $sqla = $dict->CreateDatabase('KUTU',array('postgres'=>"LOCATION='/u01/postdata'")); |
---|
| 60 | $dict->SetSchema('KUTU'); |
---|
| 61 | |
---|
| 62 | $sqli = ($dict->CreateTableSQL('testtable',$flds, $opts)); |
---|
[34] | 63 | $sqla = array_merge($sqla,$sqli); |
---|
[2] | 64 | |
---|
[34] | 65 | $sqli = $dict->CreateIndexSQL('idx','testtable','price,firstname,lastname',array('BITMAP','FULLTEXT','CLUSTERED','HASH')); |
---|
| 66 | $sqla = array_merge($sqla,$sqli); |
---|
[2] | 67 | $sqli = $dict->CreateIndexSQL('idx2','testtable','price,lastname');//,array('BITMAP','FULLTEXT','CLUSTERED')); |
---|
[34] | 68 | $sqla = array_merge($sqla,$sqli); |
---|
[2] | 69 | |
---|
| 70 | $addflds = array(array('height', 'F'),array('weight','F')); |
---|
| 71 | $sqli = $dict->AddColumnSQL('testtable',$addflds); |
---|
[34] | 72 | $sqla = array_merge($sqla,$sqli); |
---|
[2] | 73 | $addflds = array(array('height', 'F','NOTNULL'),array('weight','F','NOTNULL')); |
---|
| 74 | $sqli = $dict->AlterColumnSQL('testtable',$addflds); |
---|
[34] | 75 | $sqla = array_merge($sqla,$sqli); |
---|
[2] | 76 | |
---|
| 77 | |
---|
| 78 | printsqla($dbType,$sqla); |
---|
| 79 | |
---|
| 80 | if (file_exists('d:\inetpub\wwwroot\php\phplens\adodb\adodb.inc.php')) |
---|
[34] | 81 | if ($dbType == 'mysqlt') { |
---|
[2] | 82 | $db->Connect('localhost', "root", "", "test"); |
---|
| 83 | $dict->SetSchema(''); |
---|
| 84 | $sqla2 = $dict->ChangeTableSQL('adoxyz',$flds); |
---|
| 85 | if ($sqla2) printsqla($dbType,$sqla2); |
---|
| 86 | } |
---|
[34] | 87 | if ($dbType == 'postgres') { |
---|
| 88 | if (@$db->Connect('localhost', "tester", "test", "test")); |
---|
[2] | 89 | $dict->SetSchema(''); |
---|
| 90 | $sqla2 = $dict->ChangeTableSQL('adoxyz',$flds); |
---|
| 91 | if ($sqla2) printsqla($dbType,$sqla2); |
---|
| 92 | } |
---|
| 93 | |
---|
[34] | 94 | if ($dbType == 'odbc_mssql') { |
---|
| 95 | $dsn = $dsn = "PROVIDER=MSDASQL;Driver={SQL Server};Server=localhost;Database=northwind;"; |
---|
| 96 | if (@$db->Connect($dsn, "sa", "natsoft", "test")); |
---|
| 97 | $dict->SetSchema(''); |
---|
| 98 | $sqla2 = $dict->ChangeTableSQL('adoxyz',$flds); |
---|
| 99 | if ($sqla2) printsqla($dbType,$sqla2); |
---|
| 100 | } |
---|
| 101 | |
---|
| 102 | |
---|
| 103 | |
---|
| 104 | adodb_pr($dict->databaseType); |
---|
| 105 | printsqla($dbType, $dict->DropColumnSQL('table',array('my col','`col2_with_Quotes`','A_col3','col3(10)'))); |
---|
| 106 | printsqla($dbType, $dict->ChangeTableSQL('adoxyz','LASTNAME varchar(32)')); |
---|
| 107 | |
---|
[2] | 108 | } |
---|
| 109 | |
---|
| 110 | function printsqla($dbType,$sqla) |
---|
| 111 | { |
---|
| 112 | print "<pre>"; |
---|
| 113 | //print_r($dict->MetaTables()); |
---|
| 114 | foreach($sqla as $s) { |
---|
| 115 | $s = htmlspecialchars($s); |
---|
| 116 | print "$s;\n"; |
---|
| 117 | if ($dbType == 'oci8') print "/\n"; |
---|
| 118 | } |
---|
[34] | 119 | print "</pre><hr />"; |
---|
[2] | 120 | } |
---|
| 121 | |
---|
| 122 | /*** |
---|
| 123 | |
---|
| 124 | Generated SQL: |
---|
| 125 | |
---|
| 126 | mysql |
---|
| 127 | |
---|
| 128 | CREATE DATABASE KUTU; |
---|
| 129 | DROP TABLE KUTU.testtable; |
---|
| 130 | CREATE TABLE KUTU.testtable ( |
---|
| 131 | id INTEGER NOT NULL AUTO_INCREMENT, |
---|
| 132 | firstname VARCHAR(30) DEFAULT 'Joan', |
---|
| 133 | lastname VARCHAR(28) NOT NULL DEFAULT 'Chen', |
---|
| 134 | averylonglongfieldname LONGTEXT NOT NULL, |
---|
| 135 | price NUMERIC(7,2) NOT NULL DEFAULT 0.00, |
---|
| 136 | MYDATE DATE DEFAULT CURDATE(), |
---|
| 137 | PRIMARY KEY (id, lastname) |
---|
| 138 | )TYPE=ISAM; |
---|
| 139 | CREATE FULLTEXT INDEX idx ON KUTU.testtable (firstname,lastname); |
---|
| 140 | CREATE INDEX idx2 ON KUTU.testtable (price,lastname); |
---|
| 141 | ALTER TABLE KUTU.testtable ADD height DOUBLE; |
---|
| 142 | ALTER TABLE KUTU.testtable ADD weight DOUBLE; |
---|
| 143 | ALTER TABLE KUTU.testtable MODIFY COLUMN height DOUBLE NOT NULL; |
---|
| 144 | ALTER TABLE KUTU.testtable MODIFY COLUMN weight DOUBLE NOT NULL; |
---|
| 145 | |
---|
| 146 | |
---|
| 147 | -------------------------------------------------------------------------------- |
---|
| 148 | |
---|
| 149 | oci8 |
---|
| 150 | |
---|
| 151 | CREATE USER KUTU IDENTIFIED BY tiger; |
---|
| 152 | / |
---|
| 153 | GRANT CREATE SESSION, CREATE TABLE,UNLIMITED TABLESPACE,CREATE SEQUENCE TO KUTU; |
---|
| 154 | / |
---|
| 155 | DROP TABLE KUTU.testtable CASCADE CONSTRAINTS; |
---|
| 156 | / |
---|
| 157 | CREATE TABLE KUTU.testtable ( |
---|
| 158 | id NUMBER(16) NOT NULL, |
---|
| 159 | firstname VARCHAR(30) DEFAULT 'Joan', |
---|
| 160 | lastname VARCHAR(28) DEFAULT 'Chen' NOT NULL, |
---|
| 161 | averylonglongfieldname CLOB NOT NULL, |
---|
| 162 | price NUMBER(7,2) DEFAULT 0.00 NOT NULL, |
---|
| 163 | MYDATE DATE DEFAULT TRUNC(SYSDATE), |
---|
| 164 | PRIMARY KEY (id, lastname) |
---|
| 165 | )TABLESPACE USERS; |
---|
| 166 | / |
---|
| 167 | DROP SEQUENCE KUTU.SEQ_testtable; |
---|
| 168 | / |
---|
| 169 | CREATE SEQUENCE KUTU.SEQ_testtable; |
---|
| 170 | / |
---|
| 171 | CREATE OR REPLACE TRIGGER KUTU.TRIG_SEQ_testtable BEFORE insert ON KUTU.testtable |
---|
| 172 | FOR EACH ROW |
---|
| 173 | BEGIN |
---|
| 174 | select KUTU.SEQ_testtable.nextval into :new.id from dual; |
---|
| 175 | END; |
---|
| 176 | / |
---|
| 177 | CREATE BITMAP INDEX idx ON KUTU.testtable (firstname,lastname); |
---|
| 178 | / |
---|
| 179 | CREATE INDEX idx2 ON KUTU.testtable (price,lastname); |
---|
| 180 | / |
---|
| 181 | ALTER TABLE testtable ADD ( |
---|
| 182 | height NUMBER, |
---|
| 183 | weight NUMBER); |
---|
| 184 | / |
---|
| 185 | ALTER TABLE testtable MODIFY( |
---|
| 186 | height NUMBER NOT NULL, |
---|
| 187 | weight NUMBER NOT NULL); |
---|
| 188 | / |
---|
| 189 | |
---|
| 190 | |
---|
| 191 | -------------------------------------------------------------------------------- |
---|
| 192 | |
---|
| 193 | postgres |
---|
| 194 | AlterColumnSQL not supported for PostgreSQL |
---|
| 195 | |
---|
| 196 | |
---|
| 197 | CREATE DATABASE KUTU LOCATION='/u01/postdata'; |
---|
| 198 | DROP TABLE KUTU.testtable; |
---|
| 199 | CREATE TABLE KUTU.testtable ( |
---|
| 200 | id SERIAL, |
---|
| 201 | firstname VARCHAR(30) DEFAULT 'Joan', |
---|
| 202 | lastname VARCHAR(28) DEFAULT 'Chen' NOT NULL, |
---|
| 203 | averylonglongfieldname TEXT NOT NULL, |
---|
| 204 | price NUMERIC(7,2) DEFAULT 0.00 NOT NULL, |
---|
| 205 | MYDATE DATE DEFAULT CURRENT_DATE, |
---|
| 206 | PRIMARY KEY (id, lastname) |
---|
| 207 | ); |
---|
| 208 | CREATE INDEX idx ON KUTU.testtable USING HASH (firstname,lastname); |
---|
| 209 | CREATE INDEX idx2 ON KUTU.testtable (price,lastname); |
---|
| 210 | ALTER TABLE KUTU.testtable ADD height FLOAT8; |
---|
| 211 | ALTER TABLE KUTU.testtable ADD weight FLOAT8; |
---|
| 212 | |
---|
| 213 | |
---|
| 214 | -------------------------------------------------------------------------------- |
---|
| 215 | |
---|
| 216 | odbc_mssql |
---|
| 217 | |
---|
| 218 | CREATE DATABASE KUTU; |
---|
| 219 | DROP TABLE KUTU.testtable; |
---|
| 220 | CREATE TABLE KUTU.testtable ( |
---|
| 221 | id INT IDENTITY(1,1) NOT NULL, |
---|
| 222 | firstname VARCHAR(30) DEFAULT 'Joan', |
---|
| 223 | lastname VARCHAR(28) DEFAULT 'Chen' NOT NULL, |
---|
| 224 | averylonglongfieldname TEXT NOT NULL, |
---|
| 225 | price NUMERIC(7,2) DEFAULT 0.00 NOT NULL, |
---|
| 226 | MYDATE DATETIME DEFAULT GetDate(), |
---|
| 227 | PRIMARY KEY (id, lastname) |
---|
| 228 | ); |
---|
| 229 | CREATE CLUSTERED INDEX idx ON KUTU.testtable (firstname,lastname); |
---|
| 230 | CREATE INDEX idx2 ON KUTU.testtable (price,lastname); |
---|
| 231 | ALTER TABLE KUTU.testtable ADD |
---|
| 232 | height REAL, |
---|
| 233 | weight REAL; |
---|
| 234 | ALTER TABLE KUTU.testtable ALTER COLUMN height REAL NOT NULL; |
---|
| 235 | ALTER TABLE KUTU.testtable ALTER COLUMN weight REAL NOT NULL; |
---|
| 236 | |
---|
| 237 | |
---|
| 238 | -------------------------------------------------------------------------------- |
---|
| 239 | */ |
---|
| 240 | |
---|
[34] | 241 | |
---|
[2] | 242 | echo "<h1>Test XML Schema</h1>"; |
---|
| 243 | $ff = file('xmlschema.xml'); |
---|
| 244 | echo "<pre>"; |
---|
| 245 | foreach($ff as $xml) echo htmlspecialchars($xml); |
---|
| 246 | echo "</pre>"; |
---|
| 247 | include_once('test-xmlschema.php'); |
---|
| 248 | ?> |
---|