Merge pull request #3415 from annando/1704-db-relation
New function to recursively delete data
This commit is contained in:
commit
5ef44ad71b
5 changed files with 239 additions and 86 deletions
2
boot.php
2
boot.php
|
@ -38,7 +38,7 @@ define ( 'FRIENDICA_PLATFORM', 'Friendica');
|
|||
define ( 'FRIENDICA_CODENAME', 'Asparagus');
|
||||
define ( 'FRIENDICA_VERSION', '3.5.2-dev' );
|
||||
define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
|
||||
define ( 'DB_UPDATE_VERSION', 1221 );
|
||||
define ( 'DB_UPDATE_VERSION', 1222 );
|
||||
|
||||
/**
|
||||
* @brief Constant with a HTML line break.
|
||||
|
|
159
include/dba.php
159
include/dba.php
|
@ -23,6 +23,7 @@ class dba {
|
|||
public $error = false;
|
||||
private $_server_info = '';
|
||||
private static $dbo;
|
||||
private static $relation = array();
|
||||
|
||||
function __construct($server, $user, $pass, $db, $install = false) {
|
||||
$a = get_app();
|
||||
|
@ -519,7 +520,7 @@ class dba {
|
|||
}
|
||||
|
||||
if (!$stmt->execute()) {
|
||||
$errorInfo = self::$dbo->db->errorInfo();
|
||||
$errorInfo = $stmt->errorInfo();
|
||||
self::$dbo->error = $errorInfo[2];
|
||||
self::$dbo->errorno = $errorInfo[1];
|
||||
$retval = false;
|
||||
|
@ -531,8 +532,8 @@ class dba {
|
|||
$stmt = self::$dbo->db->stmt_init();
|
||||
|
||||
if (!$stmt->prepare($sql)) {
|
||||
self::$dbo->error = self::$dbo->db->error;
|
||||
self::$dbo->errorno = self::$dbo->db->errno;
|
||||
self::$dbo->error = $stmt->error;
|
||||
self::$dbo->errorno = $stmt->errno;
|
||||
$retval = false;
|
||||
break;
|
||||
}
|
||||
|
@ -753,6 +754,158 @@ class dba {
|
|||
return self::e($sql, $param);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Build the array with the table relations
|
||||
*
|
||||
* The array is build from the database definitions in dbstructure.php
|
||||
*
|
||||
* This process must only be started once, since the value is cached.
|
||||
*/
|
||||
static private function build_relation_data() {
|
||||
$definition = db_definition();
|
||||
|
||||
foreach ($definition AS $table => $structure) {
|
||||
foreach ($structure['fields'] AS $field => $field_struct) {
|
||||
if (isset($field_struct['relation'])) {
|
||||
foreach ($field_struct['relation'] AS $rel_table => $rel_field) {
|
||||
self::$relation[$rel_table][$rel_field][$table][] = $field;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Insert a row into a table
|
||||
*
|
||||
* @param string $table Table name
|
||||
* @param array $param parameter array
|
||||
* @param boolean $in_commit Internal use: Only do a commit after the last delete
|
||||
* @param array $callstack Internal use: prevent endless loops
|
||||
*
|
||||
* @return boolean|array was the delete successfull? When $in_commit is set: deletion data
|
||||
*/
|
||||
static public function delete($table, $param, $in_commit = false, &$callstack = array()) {
|
||||
|
||||
$commands = array();
|
||||
|
||||
// Create a key for the loop prevention
|
||||
$key = $table.':'.implode(':', array_keys($param)).':'.implode(':', $param);
|
||||
|
||||
// We quit when this key already exists in the callstack.
|
||||
if (isset($callstack[$key])) {
|
||||
return $commands;
|
||||
}
|
||||
|
||||
$callstack[$key] = true;
|
||||
|
||||
$table = self::$dbo->escape($table);
|
||||
|
||||
$commands[$key] = array('table' => $table, 'param' => $param);
|
||||
|
||||
// To speed up the whole process we cache the table relations
|
||||
if (count(self::$relation) == 0) {
|
||||
self::build_relation_data();
|
||||
}
|
||||
|
||||
// Is there a relation entry for the table?
|
||||
if (isset(self::$relation[$table])) {
|
||||
// We only allow a simple "one field" relation.
|
||||
$field = array_keys(self::$relation[$table])[0];
|
||||
$rel_def = array_values(self::$relation[$table])[0];
|
||||
|
||||
// When the search field is the relation field, we don't need to fetch the rows
|
||||
// This is useful when the leading record is already deleted in the frontend but the rest is done in the backend
|
||||
if ((count($param) == 1) AND ($field == array_keys($param)[0])) {
|
||||
foreach ($rel_def AS $rel_table => $rel_fields) {
|
||||
foreach ($rel_fields AS $rel_field) {
|
||||
$retval = self::delete($rel_table, array($rel_field => array_values($param)[0]), true, $callstack);
|
||||
$commands = array_merge($commands, $retval);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Create a key for preventing double queries
|
||||
$qkey = $field.'-'.$table.':'.implode(':', array_keys($param)).':'.implode(':', $param);
|
||||
|
||||
// We quit when this key already exists in the callstack.
|
||||
if (isset($callstack[$qkey])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$callstack[$qkey] = true;
|
||||
|
||||
// Fetch all rows that are to be deleted
|
||||
$sql = "SELECT ".self::$dbo->escape($field)." FROM `".$table."` WHERE `".
|
||||
implode("` = ? AND `", array_keys($param))."` = ?";
|
||||
|
||||
$data = self::p($sql, $param);
|
||||
while ($row = self::fetch($data)) {
|
||||
// Now we accumulate the delete commands
|
||||
$retval = self::delete($table, array($field => $row[$field]), true, $callstack);
|
||||
$commands = array_merge($commands, $retval);
|
||||
}
|
||||
|
||||
// Since we had split the delete command we don't need the original command anymore
|
||||
unset($commands[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
if (!$in_commit) {
|
||||
// Now we finalize the process
|
||||
self::p("COMMIT");
|
||||
self::p("START TRANSACTION");
|
||||
|
||||
$compacted = array();
|
||||
$counter = array();
|
||||
foreach ($commands AS $command) {
|
||||
if (count($command['param']) > 1) {
|
||||
$sql = "DELETE FROM `".$command['table']."` WHERE `".
|
||||
implode("` = ? AND `", array_keys($command['param']))."` = ?";
|
||||
|
||||
logger(dba::replace_parameters($sql, $command['param']), LOGGER_DATA);
|
||||
|
||||
if (!self::e($sql, $param)) {
|
||||
self::p("ROLLBACK");
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
$key_table = $command['table'];
|
||||
$key_param = array_keys($command['param'])[0];
|
||||
$value = array_values($command['param'])[0];
|
||||
|
||||
// Split the SQL queries in chunks of 100 values
|
||||
// We do the $i stuff here to make the code better readable
|
||||
$i = $counter[$key_table][$key_param];
|
||||
if (count($compacted[$key_table][$key_param][$i]) > 100) {
|
||||
++$i;
|
||||
}
|
||||
|
||||
$compacted[$key_table][$key_param][$i][$value] = $value;
|
||||
$counter[$key_table][$key_param] = $i;
|
||||
}
|
||||
}
|
||||
foreach ($compacted AS $table => $values) {
|
||||
foreach ($values AS $field => $field_value_list) {
|
||||
foreach ($field_value_list AS $field_values) {
|
||||
$sql = "DELETE FROM `".$table."` WHERE `".$field."` IN (".
|
||||
substr(str_repeat("?, ", count($field_values)), 0, -2).");";
|
||||
|
||||
logger(dba::replace_parameters($sql, $field_values), LOGGER_DATA);
|
||||
|
||||
if (!self::e($sql, $param)) {
|
||||
self::p("ROLLBACK");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
self::p("COMMIT");
|
||||
return true;
|
||||
}
|
||||
|
||||
return $commands;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Updates rows
|
||||
*
|
||||
|
|
|
@ -300,6 +300,9 @@ function update_structure($verbose, $action, $tables=null, $definition=null) {
|
|||
// Compare the field definition
|
||||
$field_definition = $database[$name]["fields"][$fieldname];
|
||||
|
||||
// Remove the relation data that is used for the referential integrity
|
||||
unset($parameters['relation']);
|
||||
|
||||
// We change the collation after the indexes had been changed.
|
||||
// This is done to avoid index length problems.
|
||||
// So here we always ensure that there is no need to change it.
|
||||
|
@ -627,7 +630,7 @@ function db_definition() {
|
|||
$database["attach"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"hash" => array("type" => "varchar(64)", "not null" => "1", "default" => ""),
|
||||
"filename" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"filetype" => array("type" => "varchar(64)", "not null" => "1", "default" => ""),
|
||||
|
@ -647,7 +650,7 @@ function db_definition() {
|
|||
$database["auth_codes"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "varchar(40)", "not null" => "1", "primary" => "1"),
|
||||
"client_id" => array("type" => "varchar(20)", "not null" => "1", "default" => ""),
|
||||
"client_id" => array("type" => "varchar(20)", "not null" => "1", "default" => "", "relation" => array("clients" => "client_id")),
|
||||
"redirect_uri" => array("type" => "varchar(200)", "not null" => "1", "default" => ""),
|
||||
"expires" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"scope" => array("type" => "varchar(250)", "not null" => "1", "default" => ""),
|
||||
|
@ -688,7 +691,7 @@ function db_definition() {
|
|||
"redirect_uri" => array("type" => "varchar(200)", "not null" => "1", "default" => ""),
|
||||
"name" => array("type" => "text"),
|
||||
"icon" => array("type" => "text"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
),
|
||||
"indexes" => array(
|
||||
"PRIMARY" => array("client_id"),
|
||||
|
@ -709,7 +712,7 @@ function db_definition() {
|
|||
$database["contact"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
|
||||
"self" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
|
||||
"remote_self" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
|
||||
|
@ -798,7 +801,7 @@ function db_definition() {
|
|||
"id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"guid" => array("type" => "varchar(64)", "not null" => "1", "default" => ""),
|
||||
"recips" => array("type" => "text"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"creator" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
|
||||
"updated" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
|
||||
|
@ -828,8 +831,8 @@ function db_definition() {
|
|||
"fields" => array(
|
||||
"id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"guid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"cid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"cid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
|
||||
"uri" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
|
||||
"edited" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
|
||||
|
@ -881,9 +884,9 @@ function db_definition() {
|
|||
$database["ffinder"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
|
||||
"cid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
|
||||
"fid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"cid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
|
||||
"fid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("fcontact" => "id")),
|
||||
),
|
||||
"indexes" => array(
|
||||
"PRIMARY" => array("id"),
|
||||
|
@ -904,8 +907,8 @@ function db_definition() {
|
|||
$database["fsuggest"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"cid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"cid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
|
||||
"name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"request" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
|
@ -920,8 +923,8 @@ function db_definition() {
|
|||
$database["gcign"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"gcid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"gcid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("gcontact" => "id")),
|
||||
),
|
||||
"indexes" => array(
|
||||
"PRIMARY" => array("id"),
|
||||
|
@ -971,10 +974,10 @@ function db_definition() {
|
|||
$database["glink"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"cid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"gcid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"zcid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"cid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"gcid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("gcontact" => "id")),
|
||||
"zcid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("gcontact" => "id")),
|
||||
"updated" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
|
||||
),
|
||||
"indexes" => array(
|
||||
|
@ -986,7 +989,7 @@ function db_definition() {
|
|||
$database["group"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"visible" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
|
||||
"deleted" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
|
||||
"name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
|
@ -999,9 +1002,9 @@ function db_definition() {
|
|||
$database["group_member"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
|
||||
"gid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
|
||||
"contact-id" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"gid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("group" => "id")),
|
||||
"contact-id" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
|
||||
),
|
||||
"indexes" => array(
|
||||
"PRIMARY" => array("id"),
|
||||
|
@ -1049,9 +1052,9 @@ function db_definition() {
|
|||
$database["intro"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
|
||||
"fid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"contact-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"fid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("fcontact" => "id")),
|
||||
"contact-id" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
|
||||
"knowyou" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
|
||||
"duplex" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
|
||||
"note" => array("type" => "text"),
|
||||
|
@ -1066,16 +1069,16 @@ function db_definition() {
|
|||
);
|
||||
$database["item"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "relation" => array("thread" => "iid")),
|
||||
"guid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"uri" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
|
||||
"contact-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"gcontact-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"contact-id" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
|
||||
"gcontact-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0", "relation" => array("gcontact" => "id")),
|
||||
"type" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"wall" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
|
||||
"gravity" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
|
||||
"parent" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
|
||||
"parent" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("item" => "id")),
|
||||
"parent-uri" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"extid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"thr-parent" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
|
@ -1084,11 +1087,11 @@ function db_definition() {
|
|||
"commented" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
|
||||
"received" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
|
||||
"changed" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
|
||||
"owner-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"owner-id" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
|
||||
"owner-name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"owner-link" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"owner-avatar" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"author-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"author-id" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
|
||||
"author-name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"author-link" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"author-avatar" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
|
@ -1103,7 +1106,7 @@ function db_definition() {
|
|||
"postopts" => array("type" => "text"),
|
||||
"plink" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"resource-id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"event-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"event-id" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("event" => "id")),
|
||||
"tag" => array("type" => "mediumtext"),
|
||||
"attach" => array("type" => "mediumtext"),
|
||||
"inform" => array("type" => "mediumtext"),
|
||||
|
@ -1149,6 +1152,7 @@ function db_definition() {
|
|||
"uid_parenturi" => array("uid","parent-uri(190)"),
|
||||
"uid_contactid_created" => array("uid","contact-id","created"),
|
||||
"authorid_created" => array("author-id","created"),
|
||||
"ownerid" => array("owner-id"),
|
||||
"uid_uri" => array("uid", "uri(190)"),
|
||||
"resource-id" => array("resource-id"),
|
||||
"contactid_allowcid_allowpid_denycid_denygid" => array("contact-id","allow_cid(10)","allow_gid(10)","deny_cid(10)","deny_gid(10)"), //
|
||||
|
@ -1164,8 +1168,8 @@ function db_definition() {
|
|||
$database["item_id"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"iid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"iid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("item" => "id")),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"sid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"service" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
),
|
||||
|
@ -1191,13 +1195,13 @@ function db_definition() {
|
|||
$database["mail"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"guid" => array("type" => "varchar(64)", "not null" => "1", "default" => ""),
|
||||
"from-name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"from-photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"from-url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"contact-id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"convid" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"),
|
||||
"contact-id" => array("type" => "varchar(255)", "not null" => "1", "default" => "", "relation" => array("contact" => "id")),
|
||||
"convid" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0", "relation" => array("conv" => "id")),
|
||||
"title" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"body" => array("type" => "mediumtext"),
|
||||
"seen" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
|
||||
|
@ -1219,7 +1223,7 @@ function db_definition() {
|
|||
$database["mailacct"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"server" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"port" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"ssltype" => array("type" => "varchar(16)", "not null" => "1", "default" => ""),
|
||||
|
@ -1239,8 +1243,8 @@ function db_definition() {
|
|||
$database["manage"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"mid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"mid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
),
|
||||
"indexes" => array(
|
||||
"PRIMARY" => array("id"),
|
||||
|
@ -1257,10 +1261,10 @@ function db_definition() {
|
|||
"photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"date" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
|
||||
"msg" => array("type" => "mediumtext"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"link" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"iid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"parent" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"iid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("item" => "id")),
|
||||
"parent" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("item" => "id")),
|
||||
"seen" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
|
||||
"verb" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"otype" => array("type" => "varchar(16)", "not null" => "1", "default" => ""),
|
||||
|
@ -1278,10 +1282,10 @@ function db_definition() {
|
|||
$database["notify-threads"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"notify-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"master-parent-item" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
|
||||
"notify-id" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("notify" => "id")),
|
||||
"master-parent-item" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("item" => "id")),
|
||||
"parent-item" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
|
||||
"receiver-uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"receiver-uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
),
|
||||
"indexes" => array(
|
||||
"PRIMARY" => array("id"),
|
||||
|
@ -1314,7 +1318,7 @@ function db_definition() {
|
|||
$database["pconfig"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"cat" => array("type" => "varbinary(255)", "not null" => "1", "default" => ""),
|
||||
"k" => array("type" => "varbinary(255)", "not null" => "1", "default" => ""),
|
||||
"v" => array("type" => "mediumtext"),
|
||||
|
@ -1327,8 +1331,8 @@ function db_definition() {
|
|||
$database["photo"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
|
||||
"contact-id" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"contact-id" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
|
||||
"guid" => array("type" => "varchar(64)", "not null" => "1", "default" => ""),
|
||||
"resource-id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
|
||||
|
@ -1361,7 +1365,7 @@ function db_definition() {
|
|||
$database["poll"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"q0" => array("type" => "text"),
|
||||
"q1" => array("type" => "text"),
|
||||
"q2" => array("type" => "text"),
|
||||
|
@ -1381,7 +1385,7 @@ function db_definition() {
|
|||
$database["poll_result"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"poll_id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"poll_id" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("poll" => "id")),
|
||||
"choice" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
),
|
||||
"indexes" => array(
|
||||
|
@ -1404,7 +1408,7 @@ function db_definition() {
|
|||
$database["profile"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"profile-name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"is-default" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
|
||||
"hide-friends" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
|
||||
|
@ -1454,8 +1458,8 @@ function db_definition() {
|
|||
$database["profile_check"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
|
||||
"cid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"cid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
|
||||
"dfrn_id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"sec" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"expire" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
|
@ -1467,7 +1471,7 @@ function db_definition() {
|
|||
$database["push_subscriber"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"callback_url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"topic" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"nickname" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
|
@ -1482,7 +1486,7 @@ function db_definition() {
|
|||
$database["queue"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"cid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"cid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
|
||||
"network" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
|
||||
"created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
|
||||
"last" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
|
||||
|
@ -1503,7 +1507,7 @@ function db_definition() {
|
|||
"id" => array("type" => "int(11) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"hash" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
|
||||
"uid" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"password" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"language" => array("type" => "varchar(16)", "not null" => "1", "default" => ""),
|
||||
"note" => array("type" => "text"),
|
||||
|
@ -1515,7 +1519,7 @@ function db_definition() {
|
|||
$database["search"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"term" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
),
|
||||
"indexes" => array(
|
||||
|
@ -1539,7 +1543,7 @@ function db_definition() {
|
|||
$database["sign"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"iid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
|
||||
"iid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("item" => "id")),
|
||||
"signed_text" => array("type" => "mediumtext"),
|
||||
"signature" => array("type" => "text"),
|
||||
"signer" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
|
@ -1552,7 +1556,7 @@ function db_definition() {
|
|||
$database["spam"] = array(
|
||||
"fields" => array(
|
||||
"id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"spam" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"ham" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"term" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
|
@ -1569,7 +1573,7 @@ function db_definition() {
|
|||
$database["term"] = array(
|
||||
"fields" => array(
|
||||
"tid" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
|
||||
"oid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
|
||||
"oid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("item" => "id")),
|
||||
"otype" => array("type" => "tinyint(3) unsigned", "not null" => "1", "default" => "0"),
|
||||
"type" => array("type" => "tinyint(3) unsigned", "not null" => "1", "default" => "0"),
|
||||
"term" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
|
@ -1579,7 +1583,7 @@ function db_definition() {
|
|||
"received" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
|
||||
"global" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
|
||||
"aid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
),
|
||||
"indexes" => array(
|
||||
"PRIMARY" => array("tid"),
|
||||
|
@ -1591,12 +1595,12 @@ function db_definition() {
|
|||
);
|
||||
$database["thread"] = array(
|
||||
"fields" => array(
|
||||
"iid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "primary" => "1"),
|
||||
"uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
|
||||
"contact-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"),
|
||||
"gcontact-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"),
|
||||
"owner-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"),
|
||||
"author-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"),
|
||||
"iid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "primary" => "1", "relation" => array("item" => "id")),
|
||||
"uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
"contact-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
|
||||
"gcontact-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0", "relation" => array("gcontact" => "id")),
|
||||
"owner-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
|
||||
"author-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
|
||||
"created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
|
||||
"edited" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
|
||||
"commented" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
|
||||
|
@ -1624,6 +1628,9 @@ function db_definition() {
|
|||
"uid_network_created" => array("uid","network","created"),
|
||||
"uid_contactid_commented" => array("uid","contact-id","commented"),
|
||||
"uid_contactid_created" => array("uid","contact-id","created"),
|
||||
"contactid" => array("contact-id"),
|
||||
"ownerid" => array("owner-id"),
|
||||
"authorid" => array("author-id"),
|
||||
"uid_created" => array("uid","created"),
|
||||
"uid_commented" => array("uid","commented"),
|
||||
"uid_wall_created" => array("uid","wall","created"),
|
||||
|
@ -1633,10 +1640,10 @@ function db_definition() {
|
|||
"fields" => array(
|
||||
"id" => array("type" => "varchar(40)", "not null" => "1", "primary" => "1"),
|
||||
"secret" => array("type" => "text"),
|
||||
"client_id" => array("type" => "varchar(20)", "not null" => "1", "default" => ""),
|
||||
"client_id" => array("type" => "varchar(20)", "not null" => "1", "default" => "", "relation" => array("clients" => "client_id")),
|
||||
"expires" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"scope" => array("type" => "varchar(200)", "not null" => "1", "default" => ""),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
|
||||
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
|
||||
),
|
||||
"indexes" => array(
|
||||
"PRIMARY" => array("id"),
|
||||
|
@ -1780,7 +1787,7 @@ function dbstructure_run(&$argv, &$argc) {
|
|||
echo "dryrun show database update schema queries without running them\n";
|
||||
echo "update update database schema\n";
|
||||
echo "dumpsql dump database schema\n";
|
||||
echo "toinnodb convert all tables from MyISAM to InnoDB\n";
|
||||
echo "toinnodb convert all tables from MyISAM to InnoDB\n";
|
||||
return;
|
||||
|
||||
}
|
||||
|
|
|
@ -19,14 +19,7 @@ function remove_contact_run($argv, $argc) {
|
|||
return;
|
||||
}
|
||||
|
||||
q("DELETE FROM `item` WHERE `contact-id` = %d", intval($id));
|
||||
|
||||
q("DELETE FROM `photo` WHERE `contact-id` = %d", intval($id));
|
||||
|
||||
q("DELETE FROM `mail` WHERE `contact-id` = %d", intval($id));
|
||||
|
||||
q("DELETE FROM `event` WHERE `cid` = %d", intval($id));
|
||||
|
||||
q("DELETE FROM `queue` WHERE `cid` = %d", intval($id));
|
||||
// Now we delete all the depending table entries
|
||||
dba::delete('contact', array('id' => $id));
|
||||
}
|
||||
?>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
|
||||
define('UPDATE_VERSION' , 1221);
|
||||
define('UPDATE_VERSION' , 1222);
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
Loading…
Reference in a new issue