Add creationTable function for MySQL, SQLite and PostgreSQL
git-svn-id: https://svn.fournier38.fr/svn/ProgSVN/trunk@1437 bf3deb0d-5f1a-0410-827f-c0cc1f45334c
This commit is contained in:
188
dblayer.php
188
dblayer.php
@@ -445,6 +445,194 @@ class dblayer extends PDO
|
||||
return $arr;
|
||||
}
|
||||
|
||||
/** Create the table defined by the differents fields.
|
||||
Define the SQL syntax based on SQL engines */
|
||||
public function createTable ($table, $fields, $primary, $unique)
|
||||
{
|
||||
if ($this->db === null)
|
||||
throw new Exception ("Database not connected");
|
||||
switch ($this->db->getAttribute(PDO::ATTR_DRIVER_NAME))
|
||||
{
|
||||
case "sqlite":
|
||||
$sql = "CREATE TABLE `table` (\n";
|
||||
$i = 0;
|
||||
foreach ($fields as $field=>$params)
|
||||
{
|
||||
if ($i > 0)
|
||||
$sql .= ",\n";
|
||||
// Name of field
|
||||
$sql .= "`$field` ";
|
||||
// Type of field : in $params[0]
|
||||
if (!isset ($params[0]))
|
||||
throw new Exception (_("No database type defined for field"));
|
||||
switch ($params[0])
|
||||
{
|
||||
case "integer":
|
||||
$sql .= "INTEGER";
|
||||
$params = array_slice ($params, 1);
|
||||
break;
|
||||
case "varchar":
|
||||
if (!isset ($params[1]))
|
||||
throw new Exception (_("No Size provided for varchar field"));
|
||||
$sql .= "VARCHAR(".$params[1].")";
|
||||
$params = array_slice ($params, 2);
|
||||
break;
|
||||
case "datetime":
|
||||
$sql .= "DATETIME";
|
||||
$params = array_slice ($params, 1);
|
||||
break;
|
||||
default:
|
||||
throw new Exception (_("Unknown type provided for field"));
|
||||
}
|
||||
// Primary key
|
||||
if ($primary === $field)
|
||||
$sql .= " PRIMARY KEY";
|
||||
// Others parameters for field
|
||||
// Sort to put the autoincrement field in front of params, if it is
|
||||
// present
|
||||
sort ($params);
|
||||
foreach ($params as $p)
|
||||
{
|
||||
switch ($p)
|
||||
{
|
||||
case "not null": $sql .= " NOT NULL"; break;
|
||||
case "autoincrement": $sql .= " AUTOINCREMENT";break;
|
||||
default:
|
||||
throw new Exception (_("Unknown additionnal parameter for field"),
|
||||
500);
|
||||
}
|
||||
}
|
||||
$i ++;
|
||||
}
|
||||
break;
|
||||
case "mysql":
|
||||
$sql = "CREATE TABLE `table` (\n";
|
||||
$i = 0;
|
||||
foreach ($fields as $field=>$params)
|
||||
{
|
||||
if ($i > 0)
|
||||
$sql .= ",\n";
|
||||
// Name of field
|
||||
$sql .= "`$field` ";
|
||||
// Type of field : in $params[0]
|
||||
if (!isset ($params[0]))
|
||||
throw new Exception (_("No database type defined for field"));
|
||||
switch ($params[0])
|
||||
{
|
||||
case "integer":
|
||||
$sql .= "INTEGER";
|
||||
$params = array_slice ($params, 1);
|
||||
break;
|
||||
case "varchar":
|
||||
if (!isset ($params[1]))
|
||||
throw new Exception (_("No Size provided for varchar field"));
|
||||
$sql .= "VARCHAR(".$params[1].")";
|
||||
$params = array_slice ($params, 2);
|
||||
break;
|
||||
case "datetime":
|
||||
$sql .= "DATETIME";
|
||||
$params = array_slice ($params, 1);
|
||||
break;
|
||||
default:
|
||||
throw new Exception (_("Unknown type provided for field"));
|
||||
}
|
||||
// Primary key
|
||||
if ($primary === $field)
|
||||
$sql .= " PRIMARY KEY";
|
||||
// Others parameters for field
|
||||
// Sort to put the autoincrement field in front of params, if it is
|
||||
// present
|
||||
sort ($params);
|
||||
foreach ($params as $p)
|
||||
{
|
||||
switch ($p)
|
||||
{
|
||||
case "not null": $sql .= " NOT NULL"; break;
|
||||
case "autoincrement": $sql .= " AUTO_INCREMENT";break;
|
||||
default:
|
||||
throw new Exception (_("Unknown additionnal parameter for field"),
|
||||
500);
|
||||
}
|
||||
}
|
||||
$i ++;
|
||||
}
|
||||
break;
|
||||
case "pgsql":
|
||||
$sql = "CREATE TABLE \"table\" (\n";
|
||||
$i = 0;
|
||||
foreach ($fields as $field=>$params)
|
||||
{
|
||||
if ($i > 0)
|
||||
$sql .= ",\n";
|
||||
// Name of field
|
||||
$sql .= "\"$field\" ";
|
||||
if (in_array ("autoincrement", $params))
|
||||
$sql .= "SERIAL";
|
||||
else
|
||||
{
|
||||
// Type of field : in $params[0]
|
||||
if (!isset ($params[0]))
|
||||
throw new Exception (_("No database type defined for field"));
|
||||
switch ($params[0])
|
||||
{
|
||||
case "integer":
|
||||
$sql .= "INTEGER";
|
||||
$params = array_slice ($params, 1);
|
||||
break;
|
||||
case "varchar":
|
||||
if (!isset ($params[1]))
|
||||
throw new Exception (_("No Size provided for varchar field"));
|
||||
$sql .= "VARCHAR(".$params[1].")";
|
||||
$params = array_slice ($params, 2);
|
||||
break;
|
||||
case "datetime":
|
||||
$sql .= "timestamp with time zone";
|
||||
$params = array_slice ($params, 1);
|
||||
break;
|
||||
default:
|
||||
throw new Exception (_("Unknown type provided for field"));
|
||||
}
|
||||
// Primary key
|
||||
if ($primary === $field)
|
||||
$sql .= " PRIMARY KEY";
|
||||
// Others parameters for field
|
||||
// Sort to put the autoincrement field in front of params, if it is
|
||||
// present
|
||||
sort ($params);
|
||||
foreach ($params as $p)
|
||||
{
|
||||
switch ($p)
|
||||
{
|
||||
case "not null": $sql .= " NOT NULL"; break;
|
||||
default:
|
||||
throw new Exception (_("Unknown additionnal parameter for field"),
|
||||
500);
|
||||
}
|
||||
}
|
||||
}
|
||||
$i ++;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw new Exception (_("PDO Engine not supported in dbLayer", 500));
|
||||
}
|
||||
|
||||
// Unique fields
|
||||
if ($unique !== null)
|
||||
{
|
||||
foreach ($unique as $u)
|
||||
{
|
||||
$sql .= ",\n UNIQUE (";
|
||||
if (is_array ($u))
|
||||
$sql .=implode (",", $u);
|
||||
else
|
||||
$sql .= $u;
|
||||
$sql .=")";
|
||||
}
|
||||
}
|
||||
$sql .=")";
|
||||
echo "$sql\n";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user