1 |
kdziedzi |
1.1 |
<?php
|
2 |
|
|
/*
|
3 |
|
|
|
4 |
|
|
V4.81 3 May 2006 (c) 2000-2006 John Lim (jlim#natsoft.com.my). All rights reserved.
|
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 |
|
|
|
16 |
|
|
foreach(array('sapdb','sybase','mysql','access','oci8po','postgres','odbc_mssql','odbc','db2','firebird','informix') as $dbType) {
|
17 |
|
|
echo "<h3>$dbType</h3><p>";
|
18 |
|
|
$db = NewADOConnection($dbType);
|
19 |
|
|
$dict = NewDataDictionary($db);
|
20 |
|
|
|
21 |
|
|
if (!$dict) continue;
|
22 |
|
|
$dict->debug = 1;
|
23 |
|
|
|
24 |
|
|
$opts = array('REPLACE','mysql' => 'ENGINE=INNODB', 'oci8' => 'TABLESPACE USERS');
|
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,
|
50 |
|
|
FIRSTNAME VARCHAR(30) DEFAULT 'Joan',
|
51 |
|
|
LASTNAME VARCHAR(28) DEFAULT 'Chen' key,
|
52 |
|
|
averylonglongfieldname X(1024) DEFAULT 'test',
|
53 |
|
|
price N(7.2) DEFAULT '0.00',
|
54 |
|
|
MYDATE D DEFDATE,
|
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));
|
63 |
|
|
$sqla = array_merge($sqla,$sqli);
|
64 |
|
|
|
65 |
|
|
$sqli = $dict->CreateIndexSQL('idx','testtable','firstname,lastname',array('BITMAP','FULLTEXT','CLUSTERED','HASH'));
|
66 |
|
|
$sqla = array_merge($sqla,$sqli);
|
67 |
|
|
$sqli = $dict->CreateIndexSQL('idx2','testtable','price,lastname');//,array('BITMAP','FULLTEXT','CLUSTERED'));
|
68 |
|
|
$sqla = array_merge($sqla,$sqli);
|
69 |
|
|
|
70 |
|
|
$addflds = array(array('height', 'F'),array('weight','F'));
|
71 |
|
|
$sqli = $dict->AddColumnSQL('testtable',$addflds);
|
72 |
|
|
$sqla = array_merge($sqla,$sqli);
|
73 |
|
|
$addflds = array(array('height', 'F','NOTNULL'),array('weight','F','NOTNULL'));
|
74 |
|
|
$sqli = $dict->AlterColumnSQL('testtable',$addflds);
|
75 |
|
|
$sqla = array_merge($sqla,$sqli);
|
76 |
|
|
|
77 |
|
|
|
78 |
|
|
printsqla($dbType,$sqla);
|
79 |
|
|
|
80 |
|
|
if (file_exists('d:\inetpub\wwwroot\php\phplens\adodb\adodb.inc.php'))
|
81 |
|
|
if ($dbType == 'mysqlt') {
|
82 |
|
|
$db->Connect('localhost', "root", "", "test");
|
83 |
|
|
$dict->SetSchema('');
|
84 |
|
|
$sqla2 = $dict->ChangeTableSQL('adoxyz',$flds);
|
85 |
|
|
if ($sqla2) printsqla($dbType,$sqla2);
|
86 |
|
|
}
|
87 |
|
|
if ($dbType == 'postgres') {
|
88 |
|
|
if (@$db->Connect('localhost', "tester", "test", "test"));
|
89 |
|
|
$dict->SetSchema('');
|
90 |
|
|
$sqla2 = $dict->ChangeTableSQL('adoxyz',$flds);
|
91 |
|
|
if ($sqla2) printsqla($dbType,$sqla2);
|
92 |
|
|
}
|
93 |
|
|
|
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 |
|
|
|
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 |
|
|
}
|
119 |
|
|
print "</pre><hr />";
|
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 |
|
|
|
241 |
|
|
|
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 |
|
|
?> |