metabase/metabase_mysql.php - view - 1.15
<?
if(!defined("METABASE_MYSQL_INCLUDED"))
{
define("METABASE_MYSQL_INCLUDED",1);
/*
* metabase_mysql.php
*
* @(#) $Header: /opt2/mlemos/cvs/metal/metabase/metabase_mysql.php,v 1.15 1999/03/11 02:13:11 mlemos Exp $
*
*/
class metabase_mysql_class extends metabase_database_class
{
var $connection=0;
var $connected_host;
var $connected_user;
var $connected_password;
var $connected_port;
var $selected_database="";
var $opened_persistent="";
Function Connect()
{
if($this->connection!=0)
{
if($this->connected_host==$this->host
&& $this->connected_user==$this->user
&& $this->connected_password==$this->password
&& $this->connected_port==$this->port
&& $this->opened_persistent==$this->persistent)
return(1);
mysql_Close($this->connection);
$this->connection=0;
}
$function=($this->persistent ? "mysql_pconnect" : "mysql_connect");
if(($this->connection=@$function($this->host.($this->port=="" ? "" : ":".$this->port),$this->user,$this->password))<=0)
{
$this->last_error=(IsSet($php_errormsg) ? $php_errormsg : "Could not connect to MySQL server");
return(0);
}
$this->connected_host=$this->host;
$this->connected_user=$this->user;
$this->connected_password=$this->password;
$this->connected_port=$this->port;
$this->opened_persistent=$this->persistent;
return(1);
}
Function Close()
{
if($this->connection!=0)
{
mysql_Close($this->connection);
$this->connection=0;
}
}
Function SelectDatabase()
{
if($this->database_name=="")
{
$this->last_error="It was not specified a valid database name to select";
return(0);
}
$last_connection=$this->connection;
if(!$this->Connect())
return(0);
if($last_connection==$this->connection
&& $this->selected_database!=""
&& $this->selected_database==$this->database_name)
return(1);
if(!mysql_select_db($this->database_name,$this->connection))
{
$this->last_error=mysql_error($this->connection);
return(0);
}
$this->selected_database=$this->database_name;
return(1);
}
Function Query($query)
{
if(!$this->SelectDatabase())
return(0);
if(($result=mysql_query($query,$this->connection))==0)
$this->last_error=mysql_error($this->connection);
return($result);
}
Function FetchResult($result,$row,$field)
{
return(mysql_result($result,$row,$field));
}
Function NumberOfRows($result)
{
return(mysql_num_rows($result));
}
Function FreeResult($result)
{
mysql_free_result($result);
}
Function Error()
{
return($this->last_error);
}
Function CreateDatabase($name)
{
if(!$this->Connect())
return(0);
if(!mysql_create_db($name,$this->connection))
{
$this->last_error=mysql_error($this->connection);
return(0);
}
return(1);
}
Function DropDatabase($name)
{
if(!$this->Connect())
return(0);
if(!mysql_drop_db($name,$this->connection))
{
$this->last_error=mysql_error($this->connection);
return(0);
}
return(1);
}
Function GetIntegerFieldTypeDeclaration($name,&$field)
{
return("$name ".(IsSet($field["UNSIGNED"]) ? "INT UNSIGNED" : "INT").(IsSet($field["DEFAULT"]) ? " DEFAULT ".$field["DEFAULT"] : ""));
}
Function GetDateFieldTypeDeclaration($name,&$field)
{
return($name.(IsSet($field["TIME"]) ? " DATETIME" : " DATE").(IsSet($field["DEFAULT"]) ? " DEFAULT '".$field["DEFAULT"]."'" : ""));
}
Function GetMoneyFieldTypeDeclaration($name,&$field)
{
return("$name MONEY ".(IsSet($field["DEFAULT"]) ? " DEFAULT ".$field["DEFAULT"] : ""));
}
Function GetMoneyFieldValue($value)
{
return("$value"=="NULL" ? "NULL" : $value);
}
Function SupportCountFunction()
{
return(1);
}
Function SupportMaxFunction()
{
return(1);
}
Function AlterTable($name,$changes,$check)
{
if($check)
{
for($change=0,Reset($changes);$change<count($changes);Next($changes),$change++)
{
switch(Key($changes))
{
case "AddedFields":
case "RemovedFields":
break;
case "NAME":
case "RenamedFields":
case "ChangedFields":
default:
$this->last_error="change type \"".Key($changes)."\" not yet supported";
return(0);
}
}
return(1);
}
else
{
if(IsSet($changes["NAME"])
|| IsSet($changes["RenamedFields"])
|| IsSet($changes["ChangedFields"]))
{
$this->last_error="method not implemented";
return(0);
}
$query="";
if(IsSet($changes["AddedFields"]))
{
$fields=$changes["AddedFields"];
for($field=0,Reset($fields);$field<count($fields);Next($fields),$field++)
{
if($query!="")
$query.=", ";
$query.="ADD ".$fields[Key($fields)]["Declaration"];
}
}
if(IsSet($changes["RemovedFields"]))
{
$fields=$changes["RemovedFields"];
for($field=0,Reset($fields);$field<count($fields);Next($fields),$field++)
{
if($query!="")
$query.=", ";
$query.="DROP ".Key($fields);
}
}
return($this->Query("ALTER TABLE $name $query"));
}
}
Function CreateSequence($name,$start)
{
if(!$this->Query("CREATE TABLE _sequence_$name (sequence INT DEFAULT '0' NOT NULL AUTO_INCREMENT, PRIMARY KEY (sequence))"))
return(0);
if($this->Query("INSERT INTO _sequence_$name (sequence) VALUES (".($start-1).")")
&& $this->Query("UPDATE _sequence_$name SET sequence=".($start-1)))
return(1);
$error=$this->last_error;
if(!$this->Query("DROP TABLE _sequence_$name"))
$this->warning="could not drop inconsistent sequence table";
$this->last_error=$error;
return(0);
}
Function DropSequence($name)
{
return($this->Query("DROP TABLE _sequence_$name"));
}
Function GetSequenceNextValue($name,&$value)
{
if(!$this->Query("INSERT INTO _sequence_$name (sequence) VALUES (NULL)"))
return(0);
$value=mysql_insert_id();
if(!$this->Query("DELETE FROM _sequence_$name WHERE sequence<$value"))
$this->warning="could delete previous sequence table values";
return(1);
}
Function SupportGetSequenceCurrentValue()
{
return(1);
}
Function GetSequenceCurrentValue($name,&$value)
{
if(($result=$this->Query("SELECT MAX(sequence) FROM _sequence_$name"))==0)
return(0);
$value=$this->FetchResult($result,0,0);
$this->FreeResult($result);
return(1);
}
};
}
?>
|