forked from extern/egroupware
225 lines
6.6 KiB
PHP
225 lines
6.6 KiB
PHP
|
<?php
|
||
|
/*
|
||
|
|
||
|
V3.94 13 Oct 2003 (c) 2000-2003 John Lim (jlim@natsoft.com.my). All rights reserved.
|
||
|
Released under both BSD license and Lesser GPL library license.
|
||
|
Whenever there is any discrepancy between the two licenses,
|
||
|
the BSD license will take precedence.
|
||
|
|
||
|
Set tabs to 4 for best viewing.
|
||
|
|
||
|
*/
|
||
|
|
||
|
error_reporting(E_ALL);
|
||
|
include_once('../adodb.inc.php');
|
||
|
|
||
|
foreach(array('sybase','mysql','access','oci8','postgres','odbc_mssql','odbc','sybase','firebird','informix','db2') as $dbType) {
|
||
|
echo "<h3>$dbType</h3><p>";
|
||
|
$db = NewADOConnection($dbType);
|
||
|
$dict = NewDataDictionary($db);
|
||
|
|
||
|
if (!$dict) continue;
|
||
|
$dict->debug = 1;
|
||
|
|
||
|
$opts = array('REPLACE','mysql' => 'TYPE=ISAM', 'oci8' => 'TABLESPACE USERS');
|
||
|
|
||
|
/* $flds = array(
|
||
|
array('id', 'I',
|
||
|
'AUTO','KEY'),
|
||
|
|
||
|
array('name' => 'firstname', 'type' => 'varchar','size' => 30,
|
||
|
'DEFAULT'=>'Joan'),
|
||
|
|
||
|
array('lastname','varchar',28,
|
||
|
'DEFAULT'=>'Chen','key'),
|
||
|
|
||
|
array('averylonglongfieldname','X',1024,
|
||
|
'NOTNULL','default' => 'test'),
|
||
|
|
||
|
array('price','N','7.2',
|
||
|
'NOTNULL','default' => '0.00'),
|
||
|
|
||
|
array('MYDATE', 'D',
|
||
|
'DEFDATE'),
|
||
|
array('TS','T',
|
||
|
'DEFTIMESTAMP')
|
||
|
);*/
|
||
|
|
||
|
$flds = "
|
||
|
ID I AUTO KEY,
|
||
|
FIRSTNAME VARCHAR(30) DEFAULT 'Joan',
|
||
|
LASTNAME VARCHAR(28) DEFAULT 'Chen' key,
|
||
|
averylonglongfieldname X(1024) DEFAULT 'test',
|
||
|
price N(7.2) DEFAULT '0.00',
|
||
|
MYDATE D DEFDATE,
|
||
|
BIGFELLOW X NOTNULL,
|
||
|
TS T DEFTIMESTAMP";
|
||
|
|
||
|
|
||
|
$sqla = $dict->CreateDatabase('KUTU',array('postgres'=>"LOCATION='/u01/postdata'"));
|
||
|
$dict->SetSchema('KUTU');
|
||
|
|
||
|
$sqli = ($dict->CreateTableSQL('testtable',$flds, $opts));
|
||
|
$sqla =& array_merge($sqla,$sqli);
|
||
|
|
||
|
$sqli = $dict->CreateIndexSQL('idx','testtable','firstname,lastname',array('BITMAP','FULLTEXT','CLUSTERED','HASH'));
|
||
|
$sqla =& array_merge($sqla,$sqli);
|
||
|
$sqli = $dict->CreateIndexSQL('idx2','testtable','price,lastname');//,array('BITMAP','FULLTEXT','CLUSTERED'));
|
||
|
$sqla =& array_merge($sqla,$sqli);
|
||
|
|
||
|
$addflds = array(array('height', 'F'),array('weight','F'));
|
||
|
$sqli = $dict->AddColumnSQL('testtable',$addflds);
|
||
|
$sqla =& array_merge($sqla,$sqli);
|
||
|
$addflds = array(array('height', 'F','NOTNULL'),array('weight','F','NOTNULL'));
|
||
|
$sqli = $dict->AlterColumnSQL('testtable',$addflds);
|
||
|
$sqla =& array_merge($sqla,$sqli);
|
||
|
|
||
|
|
||
|
printsqla($dbType,$sqla);
|
||
|
|
||
|
if ($dbType == 'mysql') {
|
||
|
$db->Connect('localhost', "root", "", "test");
|
||
|
$dict->SetSchema('');
|
||
|
$sqla2 = $dict->ChangeTableSQL('adoxyz',$flds);
|
||
|
if ($sqla2) printsqla($dbType,$sqla2);
|
||
|
}
|
||
|
if ($dbType == 'postgres') {
|
||
|
$db->Connect('localhost', "tester", "test", "test");
|
||
|
$dict->SetSchema('');
|
||
|
$sqla2 = $dict->ChangeTableSQL('adoxyz',$flds);
|
||
|
if ($sqla2) printsqla($dbType,$sqla2);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
function printsqla($dbType,$sqla)
|
||
|
{
|
||
|
print "<pre>";
|
||
|
//print_r($dict->MetaTables());
|
||
|
foreach($sqla as $s) {
|
||
|
$s = htmlspecialchars($s);
|
||
|
print "$s;\n";
|
||
|
if ($dbType == 'oci8') print "/\n";
|
||
|
}
|
||
|
print "</pre><hr>";
|
||
|
}
|
||
|
|
||
|
/***
|
||
|
|
||
|
Generated SQL:
|
||
|
|
||
|
mysql
|
||
|
|
||
|
CREATE DATABASE KUTU;
|
||
|
DROP TABLE KUTU.testtable;
|
||
|
CREATE TABLE KUTU.testtable (
|
||
|
id INTEGER NOT NULL AUTO_INCREMENT,
|
||
|
firstname VARCHAR(30) DEFAULT 'Joan',
|
||
|
lastname VARCHAR(28) NOT NULL DEFAULT 'Chen',
|
||
|
averylonglongfieldname LONGTEXT NOT NULL,
|
||
|
price NUMERIC(7,2) NOT NULL DEFAULT 0.00,
|
||
|
MYDATE DATE DEFAULT CURDATE(),
|
||
|
PRIMARY KEY (id, lastname)
|
||
|
)TYPE=ISAM;
|
||
|
CREATE FULLTEXT INDEX idx ON KUTU.testtable (firstname,lastname);
|
||
|
CREATE INDEX idx2 ON KUTU.testtable (price,lastname);
|
||
|
ALTER TABLE KUTU.testtable ADD height DOUBLE;
|
||
|
ALTER TABLE KUTU.testtable ADD weight DOUBLE;
|
||
|
ALTER TABLE KUTU.testtable MODIFY COLUMN height DOUBLE NOT NULL;
|
||
|
ALTER TABLE KUTU.testtable MODIFY COLUMN weight DOUBLE NOT NULL;
|
||
|
|
||
|
|
||
|
--------------------------------------------------------------------------------
|
||
|
|
||
|
oci8
|
||
|
|
||
|
CREATE USER KUTU IDENTIFIED BY tiger;
|
||
|
/
|
||
|
GRANT CREATE SESSION, CREATE TABLE,UNLIMITED TABLESPACE,CREATE SEQUENCE TO KUTU;
|
||
|
/
|
||
|
DROP TABLE KUTU.testtable CASCADE CONSTRAINTS;
|
||
|
/
|
||
|
CREATE TABLE KUTU.testtable (
|
||
|
id NUMBER(16) NOT NULL,
|
||
|
firstname VARCHAR(30) DEFAULT 'Joan',
|
||
|
lastname VARCHAR(28) DEFAULT 'Chen' NOT NULL,
|
||
|
averylonglongfieldname CLOB NOT NULL,
|
||
|
price NUMBER(7,2) DEFAULT 0.00 NOT NULL,
|
||
|
MYDATE DATE DEFAULT TRUNC(SYSDATE),
|
||
|
PRIMARY KEY (id, lastname)
|
||
|
)TABLESPACE USERS;
|
||
|
/
|
||
|
DROP SEQUENCE KUTU.SEQ_testtable;
|
||
|
/
|
||
|
CREATE SEQUENCE KUTU.SEQ_testtable;
|
||
|
/
|
||
|
CREATE OR REPLACE TRIGGER KUTU.TRIG_SEQ_testtable BEFORE insert ON KUTU.testtable
|
||
|
FOR EACH ROW
|
||
|
BEGIN
|
||
|
select KUTU.SEQ_testtable.nextval into :new.id from dual;
|
||
|
END;
|
||
|
/
|
||
|
CREATE BITMAP INDEX idx ON KUTU.testtable (firstname,lastname);
|
||
|
/
|
||
|
CREATE INDEX idx2 ON KUTU.testtable (price,lastname);
|
||
|
/
|
||
|
ALTER TABLE testtable ADD (
|
||
|
height NUMBER,
|
||
|
weight NUMBER);
|
||
|
/
|
||
|
ALTER TABLE testtable MODIFY(
|
||
|
height NUMBER NOT NULL,
|
||
|
weight NUMBER NOT NULL);
|
||
|
/
|
||
|
|
||
|
|
||
|
--------------------------------------------------------------------------------
|
||
|
|
||
|
postgres
|
||
|
AlterColumnSQL not supported for PostgreSQL
|
||
|
|
||
|
|
||
|
CREATE DATABASE KUTU LOCATION='/u01/postdata';
|
||
|
DROP TABLE KUTU.testtable;
|
||
|
CREATE TABLE KUTU.testtable (
|
||
|
id SERIAL,
|
||
|
firstname VARCHAR(30) DEFAULT 'Joan',
|
||
|
lastname VARCHAR(28) DEFAULT 'Chen' NOT NULL,
|
||
|
averylonglongfieldname TEXT NOT NULL,
|
||
|
price NUMERIC(7,2) DEFAULT 0.00 NOT NULL,
|
||
|
MYDATE DATE DEFAULT CURRENT_DATE,
|
||
|
PRIMARY KEY (id, lastname)
|
||
|
);
|
||
|
CREATE INDEX idx ON KUTU.testtable USING HASH (firstname,lastname);
|
||
|
CREATE INDEX idx2 ON KUTU.testtable (price,lastname);
|
||
|
ALTER TABLE KUTU.testtable ADD height FLOAT8;
|
||
|
ALTER TABLE KUTU.testtable ADD weight FLOAT8;
|
||
|
|
||
|
|
||
|
--------------------------------------------------------------------------------
|
||
|
|
||
|
odbc_mssql
|
||
|
|
||
|
CREATE DATABASE KUTU;
|
||
|
DROP TABLE KUTU.testtable;
|
||
|
CREATE TABLE KUTU.testtable (
|
||
|
id INT IDENTITY(1,1) NOT NULL,
|
||
|
firstname VARCHAR(30) DEFAULT 'Joan',
|
||
|
lastname VARCHAR(28) DEFAULT 'Chen' NOT NULL,
|
||
|
averylonglongfieldname TEXT NOT NULL,
|
||
|
price NUMERIC(7,2) DEFAULT 0.00 NOT NULL,
|
||
|
MYDATE DATETIME DEFAULT GetDate(),
|
||
|
PRIMARY KEY (id, lastname)
|
||
|
);
|
||
|
CREATE CLUSTERED INDEX idx ON KUTU.testtable (firstname,lastname);
|
||
|
CREATE INDEX idx2 ON KUTU.testtable (price,lastname);
|
||
|
ALTER TABLE KUTU.testtable ADD
|
||
|
height REAL,
|
||
|
weight REAL;
|
||
|
ALTER TABLE KUTU.testtable ALTER COLUMN height REAL NOT NULL;
|
||
|
ALTER TABLE KUTU.testtable ALTER COLUMN weight REAL NOT NULL;
|
||
|
|
||
|
|
||
|
--------------------------------------------------------------------------------
|
||
|
*/
|
||
|
?>
|