Note: this list is kept only as a demonstration for CVSNotice. For the latest CVS notices, see the Xaraya and Postnuke sites
View Statistics - Next Notice - Previous NoticeDirectory filter : [ all ] / postnuke_official / html / includes [ view in CVS ]
| Date | Directory [filter] | File(s) [view] | Author [filter] |
| 03 Aug 2002 02:58:13 | postnuke_official/html/includes | pnTableDDL.php,NONE,1.1 | Paul Rosania |
| moved pnTableDDL.php to standard includes dir per agreement with gregor | |||
Update of /home/cvsroot/postnuke_official/html/includes
In directory ns7.hostnuke.net:/tmp/cvs-serv31808
Added Files:
pnTableDDL.php
Log Message:
moved pnTableDDL.php to standard includes dir per agreement with gregor
--- NEW FILE: pnTableDDL.php ---
<?php
// $Id: pnTableDDL.php,v 1.1 2002/08/03 02:58:11 paul Exp $
// ----------------------------------------------------------------------
// PostNuke Content Management System
// Copyright (C) 2001 by the PostNuke Development Team.
// http://www.postnuke.com/
// ----------------------------------------------------------------------
// LICENSE
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License (GPL)
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// To read the license please visit http://www.gnu.org/copyleft/gpl.html
// ----------------------------------------------------------------------
// Original Author of file: Gary Mitchell
// Purpose of file: Table Maintenance API
// ----------------------------------------------------------------------
/*
* Public Functions:
*
* pnDBCreateTable ( $table, $fields, <$db_type> )
* pnDBCreateIndex ( $table, $index, <$db_type> )
* pnDBDropTable ( $table, <$db_type> )
*
*/
/*
$sql[] = pnDBAlterTable(
array(
'table' => $pntable['nascar_tracks'],
'command' => 'add',
'field_name' => 'pn_track_name',
'new_field_name' => 'pn_track_name1'
'type' => 'integer',
'null' => FALSE,
'increment' => TRUE,
'primary_key' => TRUE,
)
); */
function pnDBAlterTable($args, $dbtype="") {
// perform validations on input arguments
if (empty($args)) return FALSE;
if (!is_array($args)) return FALSE;
if (empty($args['table']) || (empty($args['command']))) return FALSE;
if (empty($dbtype)) {
$dbtype = pnConfigGetVar('dbtype');
}
// Select the correct database type
switch($dbtype) {
case 'mysql':
$sql = pnMySQLAlterTable($args);
break;
// Other DBs go here
default:
$sql = FALSE;
}
return $sql;
}
function pnMySQLAlterTable($args) {
switch ($args['command']) {
case 'add':
if (empty($args['field'])) return FALSE;
$sql = 'ALTER TABLE '.$args['table'].' ADD ';
$sql .= join(' ',pnMySQLColumnDefinition ($args['field'],$args));
if ($args['first'] == TRUE) {
$sql .= ' FIRST';
} elseif (!empty($args['after_field'])) {
$sql .= ' AFTER '.$args['after_field'];
}
break;
case 'modify':
if (empty($args['field'])) return FALSE;
$sql = 'ALTER TABLE '.$args['table'].' CHANGE ';
$sql .= join(' ',pnMySQLColumnDefinition ($args['field'],$args));
break;
case 'drop':
if (empty($args['field'])) return FALSE;
$sql = 'ALTER TABLE '.$args['table'].' DROP COLUMN '.$args['field'];
break;
case 'rename':
if (empty($args['new_name'])) return FALSE;
$sql = 'ALTER TABLE '.$args['table'].' RENAME TO '.$args['new_name'];
break;
default:
$sql = FALSE;
}
return $sql;
}
/**
* generate the SQL to create a table
* @param table the physical table name
* @param fields an array containing the fields to create
* @returns data|false
* @return the generated SQL statement, or false on failure
*/
function pnDBCreateTable($table, $fields, $dbtype="") {
// perform validations on input arguments
if (empty($table)) return FALSE;
if (!is_array($fields)) return FALSE;
if (empty($dbtype)) {
$dbtype = pnConfigGetVar('dbtype');
}
// Select the correct database type
switch($dbtype) {
case 'mysql':
$sql_statement = pnMySQLCreateTable($table,$fields);
break;
case 'postgresql':
$sql_statement = pnPostgreSQLCreateTable($table,$fields);
break;
// Other DBs go here
default:
$sql_statement = FALSE;
}
return $sql_statement;
}
/**
* generate the SQL to delete a table
* @param table the physical table name
* @param index an array containing the index name, type and fields array
* @returns data|false
* @return the generated SQL statement, or false on failure
*/
function pnDBDropTable( $table, $dbtype="" ) {
// perform validations on input arguments
if (empty($table)) return FALSE;
if (empty($dbtype)) {
$dbtype = pnConfigGetVar('dbtype');
}
switch($dbtype) {
case 'mysql':
$sql = 'DROP TABLE '.$table;
break;
// Other DBs go here
default:
$sql = FALSE;
}
return $sql;
}
/**
* generate the SQL to create a table index
* @param table the physical table name
* @param index an array containing the index name, type and fields array
* @param dbtype is an optional parameter to specify the database type
* @returns data|false
* @return the generated SQL statement, or false on failure
*/
function pnDBCreateIndex( $table, $index, $dbtype="") {
// perform validations on input arguments
if (empty($table)) return FALSE;
if (!is_array($index)) return FALSE;
if (!is_array($index['fields'])) return FALSE;
if (empty($index['name']) || empty($index['fields'])) return FALSE;
if (empty($dbtype)) {
$dbtype = pnConfigGetVar('dbtype');
}
// Select the correct database type
switch($dbtype) {
case 'mysql':
if ($index['unique'] == TRUE) {
$sql .= 'CREATE UNIQUE INDEX '.$index['name'].' ON '.$table;
} else {
$sql .= 'CREATE INDEX '.$index['name'].' ON '.$table;
}
$sql .= ' ('.join(',',$index['fields']).')';
break;
// Other DBs go here
default:
$sql = FALSE;
}
return $sql;
}
function pnDBDropIndex($table,$fields) {
}
// PRIVATE FUNCTIONS BELOW - do not call directly
/**
* Private Function to generate the MySQL to create a table
* @param table the physical table name
* @param fields an array containing the fields to create
* @returns data|false
* @return the generated SQL statement, or false on failure
*/
function pnMySQLCreateTable($table, $fields) {
$sql_fields = array();
while (list($field_name,$parameters)=each($fields)) {
$parameters['command'] = 'create';
$this_field = pnMySQLColumnDefinition( $field_name, $parameters );
$sql_fields[] = implode(' ',$this_field);
}
$sql_statement = 'CREATE TABLE '.$table.' ('.implode(',',$sql_fields).')';
return $sql_statement;
}
function pnMySQLColumnDefinition ($field_name,$parameters) {
$this_field = array($field_name);
if ($parameters['command']=='modify') {
if (empty($parameters['new_field_name'])) {
$this_field[] = $field_name; //use same name
} else {
$this_field[] = $parameters['new_field_name']; // use new name
}
}
if (empty($parameters['size'])) {
$parameters['size'] = '';
}
switch($parameters['type']) {
case 'integer':
switch ($parameters['size']) {
case 'tiny':
$this_field[] = 'TINYINT';
break;
case 'small':
$this_field[] = 'SMALLINT';
break;
case 'medium':
$this_field[] = 'MEDIUMINT';
break;
case 'big':
$this_field[] = 'BIGINT';
break;
default:
$this_field[] = 'INTEGER';
} // switch ($parameters['size'])
break;
case 'char':
if (empty($parameters['size'])) {
return FALSE;
} else {
$this_field[] = 'CHAR('.$parameters['size'].')';
}
break;
case 'varchar':
if (empty($parameters['size'])) {
return FALSE;
} else {
$this_field[] = 'VARCHAR('.$parameters['size'].')';
}
break;
case 'text':
switch ($parameters['size']) {
case 'tiny':
$this_field[] = 'TINYTEXT';
break;
case 'medium':
$this_field[] = 'MEDIUMTEXT';
break;
case 'long':
$this_field[] = 'LONGTEXT';
break;
default:
$this_field[] = 'TEXT';
}
break;
case 'blob':
switch ($parameters['size']) {
case 'tiny':
$this_field[] = 'TINYBLOB';
break;
case 'medium':
$this_field[] = 'MEDIUMBLOB';
break;
case 'long':
$this_field[] = 'LONGBLOB';
break;
default:
$this_field[] = 'BLOB';
}
break;
case 'boolean':
$this_field[] = "BOOL";
break;
case 'datetime':
$this_field[] = "DATETIME";
// convert parameter array back to string for datetime
// array('year'=>2002,'month'=>04,'day'=>17,'hour'=>'12','minute'=>59,'second'=>0)
if (isset($parameters['default'])) {
$datetime_defaults = $parameters['default'];
$parameters['default'] = $datetime_defaults['year']
.'-'.$datetime_defaults['month']
.'-'.$datetime_defaults['day']
.' '.$datetime_defaults['hour']
.':'.$datetime_defaults['minute']
.':'.$datetime_defaults['second'];
}
break;
case 'date':
$this_field[] = "DATE";
// convert parameter array back to string for datetime
// array('year'=>2002,'month'=>04,'day'=>17)
if (isset($parameters['default'])) {
$datetime_defaults = $parameters['default'];
$parameters['default'] = $datetime_defaults['year']
.'-'.$datetime_defaults['month']
.'-'.$datetime_defaults['day'];
}
break;
// 'pn_f001'=>array('type'=>'float', 'width'=>6,'decimals'=>2),
// 'pn_f002'=>array('type'=>'float', 'size'=>'double','width'=>12, 'decimals'=>2),
// 'pn_f003'=>array('type'=>'float', 'size'=>'decimal','width'=>12, 'decimals'=>2)
case 'float':
switch ($parameters['size']) {
case 'double':
$data_type = 'DOUBLE';
break;
case 'decimal':
$data_type = 'DECIMAL';
break;
default:
$data_type = 'FLOAT';
}
if (isset($parameters['width']) && isset($parameters['decimals'])) {
$data_type .= '('.$parameters['width'].','.$parameters['width'].')';
}
$this_field[] = $data_type;
break;
case 'timestamp':
switch ($parameters['size']) {
case 'YY':
$this_field[] = 'TIMESTAMP(2)';
break;
case 'YYYY':
$this_field[] = 'TIMESTAMP(4)';
break;
case 'YYYYMM':
$this_field[] = 'TIMESTAMP(6)';
break;
case 'YYYYMMDD':
$this_field[] = 'TIMESTAMP(8)';
break;
case 'YYYYMMDDHH':
$this_field[] = 'TIMESTAMP(10)';
break;
case 'YYYYMMDDHHMM':
$this_field[] = 'TIMESTAMP(12)';
break;
case 'YYYYMMDDHHMMSS':
$this_field[] = 'TIMESTAMP(14)';
break;
default:
$this_field[] = 'TIMESTAMP';
}
break;
// undefined type
default:
return FALSE;
}
// Test for UNSIGNED
if (isset($parameters['unsigned']) && $parameters['unsigned']==TRUE) {
$this_field[] = "UNSIGNED";
}
// Test for NO NULLS
if (isset($parameters['null']) && $parameters['null']==FALSE) {
$this_field[] = "NOT NULL";
}
// Test for defaults
if (isset($parameters['default'])) {
if ($parameters['default']=='NULL') {
$this_field[] = "DEFAULT NULL";
} else {
$this_field[] = "DEFAULT '".$parameters['default']."'";
}
}
// Test for AUTO_INCREMENT
if (isset($parameters['increment']) && $parameters['increment']==TRUE) {
$this_field[] = "AUTO_INCREMENT";
}
// Test for PRIMARY KEY
if (isset($parameters['primary_key']) && $parameters['primary_key']==TRUE) {
$this_field[] = "PRIMARY KEY";
}
return $this_field;
}
/**
* Private Function to generate the PostgreSQL to create a table
* @param table the physical table name
* @param fields an array containing the fields to create
* @returns data|false
* @return the generated SQL statement, or false on failure
*/
function pnPostgreSQLCreateTable($table, $fields) {
$sql_fields = array();
while (list($field_name,$parameters)=each($fields)) {
$this_field = array($field_name);
switch($parameters['type']) {
case 'integer':
if (isset($parameters['increment']) && $parameters['increment']==TRUE) {
switch ($parameters['size']) {
case 'big':
$this_field[] = 'BIGSERIAL';
break;
default:
$this_field[] = 'SERIAL';
}
} else {
switch ($parameters['size']) {
case 'tiny':
$this_field[] = 'SMALLINT';
break;
case 'small':
$this_field[] = 'SMALLINT';
break;
case 'big':
$this_field[] = 'BIGINT';
break;
default:
$this_field[] = 'INTEGER';
}
} // switch ($parameters['size'])
break;
case 'char':
if (empty($parameters['size'])) {
return FALSE;
} else {
$this_field[] = 'CHAR('.$parameters['size'].')';
}
break;
case 'varchar':
if (empty($parameters['size'])) {
return FALSE;
} else {
$this_field[] = 'VARCHAR('.$parameters['size'].')';
}
break;
case 'text':
$this_field[] = 'TEXT';
break;
case 'blob':
$this_field[] = 'BYTEA';
break;
case 'boolean':
$this_field[] = "BOOLEAN";
break;
case 'timestamp':
case 'datetime':
$this_field[] = "TIMESTAMP";
// convert parameter array back to string for datetime
// array('year'=>2002,'month'=>04,'day'=>17,'hour'=>'12','minute'=>59,'second'=>0)
if (isset($parameters['default'])) {
$datetime_defaults = $parameters['default'];
$parameters['default'] = $datetime_defaults['year']
.'-'.$datetime_defaults['month']
.'-'.$datetime_defaults['day']
.' '.$datetime_defaults['hour']
.':'.$datetime_defaults['minute']
.':'.$datetime_defaults['second'];
if (isset($datetime_defaults['timezone'])) { // optional parm
$parameters['default'] = $datetime_defaults['timezone'];
}
}
break;
case 'date':
$this_field[] = "DATE";
// convert parameter array back to string for datetime
// array('year'=>2002,'month'=>04,'day'=>17)
if (isset($parameters['default'])) {
$datetime_defaults = $parameters['default'];
$parameters['default'] = $datetime_defaults['year']
.'-'.$datetime_defaults['month']
.'-'.$datetime_defaults['day'];
}
break;
// 'pn_f001'=>array('type'=>'float', 'width'=>6,'decimals'=>2),
// 'pn_f002'=>array('type'=>'float', 'size'=>'double','width'=>12, 'decimals'=>2),
// 'pn_f003'=>array('type'=>'float', 'size'=>'decimal','width'=>12, 'decimals'=>2)
case 'float':
switch ($parameters['size']) {
case 'double':
$data_type = 'DOUBLE PRECISION';
break;
case 'decimal':
$data_type = 'DECIMAL';
break;
default:
$data_type = 'REAL';
}
if (isset($parameters['width']) && isset($parameters['decimals'])) {
$data_type .= '('.$parameters['width'].','.$parameters['width'].')';
}
$this_field[] = $data_type;
break;
// undefined type
default:
return FALSE;
}
// Test for defaults - must come after datatype for PostgreSQL
if (isset($parameters['default'])) {
if ($parameters['default']=='NULL') {
$this_field[] = "DEFAULT NULL";
} else {
$this_field[] = "DEFAULT '".$parameters['default']."'";
}
}
// Test for UNSIGNED
if (isset($parameters['unsigned']) && $parameters['unsigned']==TRUE) {
$this_field[] = "UNSIGNED";
}
// Test for NO NULLS
if (isset($parameters['null']) && $parameters['null']==FALSE) {
$this_field[] = "NOT NULL";
}
// Test for PRIMARY KEY
if (isset($parameters['primary_key']) && $parameters['primary_key']==TRUE) {
$this_field[] = "PRIMARY KEY";
}
$sql_fields[] = implode(' ',$this_field);
}
$sql_statement = 'CREATE TABLE '.$table.' ('.implode(',',$sql_fields).')';
return $sql_statement;
}
?>
View Statistics - Next Notice - Previous Notice
| Visit Developer Site - Browse CVS Repository |
Syndicate via backend.rss (max. once per hour please) | Powered by CVSNotice 0.1.3 |