You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PlexShare/fuel/core/classes/dbutil.php

446 lines
12 KiB

<?php
/**
* Part of the Fuel framework.
*
* @package Fuel
* @version 1.8
* @author Fuel Development Team
* @license MIT License
* @copyright 2010 - 2016 Fuel Development Team
* @link http://fuelphp.com
*/
namespace Fuel\Core;
/**
* DBUtil Class
*
* @package Fuel
* @category Core
* @author Dan Horrigan
*/
class DBUtil
{
/**
* @var string $connection the database connection (identifier)
*/
protected static $connection = null;
/*
* Load the db config, the Database_Connection might not have fired jet.
*
*/
public static function _init()
{
\Config::load('db', true);
}
/**
* Sets the database connection to use for following DBUtil calls.
*
* @throws \FuelException
* @param string $connection connection name, null for default
*/
public static function set_connection($connection)
{
if ($connection !== null and ! is_string($connection))
{
throw new \FuelException('A connection must be supplied as a string.');
}
static::$connection = $connection;
}
/**
* Creates a database. Will throw a Database_Exception if it cannot.
*
* @throws Fuel\Database_Exception
* @param string $database the database name
* @param string $charset the character set
* @param boolean $if_not_exists whether to add an IF NOT EXISTS statement.
* @param string $db the database connection to use
* @return int the number of affected rows
*/
public static function create_database($database, $charset = null, $if_not_exists = true, $db = null)
{
return \Database_Connection::instance($db ? $db : static::$connection)->schema(
'create_database',
array(
$database,
$charset,
$if_not_exists,
)
);
}
/**
* Drops a database. Will throw a Database_Exception if it cannot.
*
* @throws Fuel\Database_Exception
* @param string $database the database name
* @param string $db the database connection to use
* @return int the number of affected rows
*/
public static function drop_database($database, $db = null)
{
return \Database_Connection::instance($db ? $db : static::$connection)->schema(
'drop_database',
array(
$database,
)
);
}
/**
* Drops a table. Will throw a Database_Exception if it cannot.
*
* @throws Fuel\Database_Exception
* @param string $table the table name
* @param string $db the database connection to use
* @return int the number of affected rows
*/
public static function drop_table($table, $db = null)
{
return \Database_Connection::instance($db ? $db : static::$connection)->schema(
'drop_table',
array(
$table,
)
);
}
/**
* Renames a table. Will throw a Database_Exception if it cannot.
*
* @throws \Database_Exception
* @param string $table the old table name
* @param string $new_table_name the new table name
* @param string $db the database connection to use
* @return int the number of affected
*/
public static function rename_table($table, $new_table_name, $db = null)
{
return \Database_Connection::instance($db ? $db : static::$connection)->schema(
'rename_table',
array(
$table,
$new_table_name,
)
);
}
/**
* Creates a table.
*
* @throws \Database_Exception
* @param string $table the table name
* @param array $fields the fields array
* @param array $primary_keys an array of primary keys
* @param boolean $if_not_exists whether to add an IF NOT EXISTS statement.
* @param string|boolean $engine storage engine overwrite
* @param string $charset default charset overwrite
* @param array $foreign_keys an array of foreign keys
* @param string $db the database connection to use
* @return int number of affected rows.
*/
public static function create_table($table, $fields, $primary_keys = array(), $if_not_exists = true, $engine = false, $charset = null, $foreign_keys = array(), $db = null)
{
return \Database_Connection::instance($db ? $db : static::$connection)->schema(
'create_table',
array(
$table,
$fields,
$primary_keys,
$if_not_exists,
$engine,
$charset,
$foreign_keys,
)
);
}
/**
* Adds fields to a table a table. Will throw a Database_Exception if it cannot.
*
* @throws Fuel\Database_Exception
* @param string $table the table name
* @param array $fields the new fields
* @param string $db the database connection to use
* @return int the number of affected
*/
public static function add_fields($table, $fields, $db = null)
{
return static::alter_fields('ADD', $table, $fields, $db);
}
/**
* Modifies fields in a table. Will throw a Database_Exception if it cannot.
*
* @throws Fuel\Database_Exception
* @param string $table the table name
* @param array $fields the modified fields
* @param string $db the database connection to use
* @return int the number of affected
*/
public static function modify_fields($table, $fields, $db = null)
{
return static::alter_fields('MODIFY', $table, $fields, $db);
}
/**
* Drops fields from a table a table. Will throw a Database_Exception if it cannot.
*
* @throws Fuel\Database_Exception
* @param string $table the table name
* @param string|array $fields the fields
* @param string $db the database connection to use
* @return int the number of affected
*/
public static function drop_fields($table, $fields, $db = null)
{
return static::alter_fields('DROP', $table, $fields, $db);
}
/**
* Creates an index on that table.
*
* @access public
* @static
* @param string $table
* @param string $index_name
* @param string $index_columns
* @param string $index (should be 'unique', 'fulltext', 'spatial' or 'nonclustered')
* @param string $db the database connection to use
* @return bool
* @author Thomas Edwards
*/
public static function create_index($table, $index_columns, $index_name = '', $index = '', $db = null)
{
return \Database_Connection::instance($db ? $db : static::$connection)->schema(
'create_index',
array(
$table,
$index_columns,
$index_name,
$index,
)
);
}
/**
* Drop an index from a table.
*
* @access public
* @static
* @param string $table
* @param string $index_name
* @param string $db the database connection to use
* @return bool
* @author Thomas Edwards
*/
public static function drop_index($table, $index_name, $db = null)
{
return \Database_Connection::instance($db ? $db : static::$connection)->schema(
'drop_index',
array(
$table,
$index_name,
)
);
}
/**
* Adds a single foreign key to a table
*
* @param string $table the table name
* @param array $foreign_key a single foreign key
* @param string $db the database connection to use
* @return int number of affected rows
*/
public static function add_foreign_key($table, $foreign_key, $db = null)
{
return \Database_Connection::instance($db ? $db : static::$connection)->schema(
'add_foreign_key',
array(
$table,
$foreign_key,
)
);
}
/**
* Drops a foreign key from a table
*
* @param string $table the table name
* @param string $fk_name the foreign key name
* @param string $db the database connection to use
* @return int number of affected rows
*/
public static function drop_foreign_key($table, $fk_name, $db = null)
{
return \Database_Connection::instance($db ? $db : static::$connection)->schema(
'drop_foreign_key',
array(
$table,
$fk_name,
)
);
}
/**
* Returns string of foreign keys
*
* @throws \Database_Exception
* @param array $foreign_keys Array of foreign key rules
* @param string $db the database connection to use
* @return string the formatted foreign key string
*/
public static function process_foreign_keys($foreign_keys, $db = null)
{
return \Database_Connection::instance($db ? $db : static::$connection)->schema(
'process_foreign_keys',
array(
$foreign_keys,
)
);
}
/**
* Truncates a table.
*
* @throws Fuel\Database_Exception
* @param string $table the table name
* @param string $db the database connection to use
* @return int the number of affected rows
*/
public static function truncate_table($table, $db = null)
{
return \Database_Connection::instance($db ? $db : static::$connection)->schema(
'truncate_table',
array(
$table,
)
);
}
/**
* Analyzes a table.
*
* @param string $table the table name
* @param string $db the database connection to use
* @return bool whether the table is OK
*/
public static function analyze_table($table, $db = null)
{
return static::table_maintenance('ANALYZE TABLE', $table, $db);
}
/**
* Checks a table.
*
* @param string $table the table name
* @param string $db the database connection to use
* @return bool whether the table is OK
*/
public static function check_table($table, $db = null)
{
return static::table_maintenance('CHECK TABLE', $table, $db);
}
/**
* Optimizes a table.
*
* @param string $table the table name
* @param string $db the database connection to use
* @return bool whether the table has been optimized
*/
public static function optimize_table($table, $db = null)
{
return static::table_maintenance('OPTIMIZE TABLE', $table, $db);
}
/**
* Repairs a table.
*
* @param string $table the table name
* @param string $db the database connection to use
* @return bool whether the table has been repaired
*/
public static function repair_table($table, $db = null)
{
return static::table_maintenance('REPAIR TABLE', $table, $db);
}
/**
* Checks if a given table exists.
*
* @throws \Database_Exception
* @param string $table Table name
* @param string $db the database connection to use
* @return bool
*/
public static function table_exists($table, $db = null)
{
return \Database_Connection::instance($db ? $db : static::$connection)->schema(
'table_exists',
array(
$table,
)
);
}
/**
* Checks if given field(s) in a given table exists.
*
* @throws \Database_Exception
* @param string $table Table name
* @param string|array $columns columns to check
* @param string $db the database connection to use
* @return bool
*/
public static function field_exists($table, $columns, $db = null)
{
return \Database_Connection::instance($db ? $db : static::$connection)->schema(
'field_exists',
array(
$table,
$columns,
)
);
}
/**
*
*/
protected static function alter_fields($type, $table, $fields, $db = null)
{
return \Database_Connection::instance($db ? $db : static::$connection)->schema(
'alter_fields',
array(
$type,
$table,
$fields,
)
);
}
/*
* Executes table maintenance. Will throw FuelException when the operation is not supported.
*
* @throws FuelException
* @param string $table the table name
* @param string $db the database connection to use
* @return bool whether the operation has succeeded
*/
protected static function table_maintenance($operation, $table, $db = null)
{
return \Database_Connection::instance($db ? $db : static::$connection)->schema(
'table_maintenance',
array(
$operation,
$table,
)
);
}
}