X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fdbstructure.php;h=2b1ee84fdac90b4a975bf411ae21ed47c9683fd0;hb=6e981ed798f8938ce7f0de91d523b1ba6359381c;hp=0ee28e0a675eeabafb28344413aa23688ab95337;hpb=a26d04574dc402adfb501f222cc824161aece9ea;p=friendica.git diff --git a/include/dbstructure.php b/include/dbstructure.php index 0ee28e0a67..2b1ee84fda 100644 --- a/include/dbstructure.php +++ b/include/dbstructure.php @@ -106,33 +106,21 @@ function table_structure($table) { } function print_structure($database) { + echo "-- ------------------------------------------\n"; + echo "-- ".FRIENDICA_PLATFORM." ".FRIENDICA_VERSION." (".FRIENDICA_CODENAME,")\n"; + echo "-- DB_UPDATE_VERSION ".DB_UPDATE_VERSION."\n"; + echo "-- ------------------------------------------\n\n\n"; foreach ($database AS $name => $structure) { - echo "\t".'$database["'.$name."\"] = array(\n"; + echo "--\n"; + echo "-- TABLE $name\n"; + echo "--\n"; + db_create_table($name, $structure['fields'], true, false, $structure["indexes"]); - echo "\t\t\t".'"fields" => array('."\n"; - foreach ($structure["fields"] AS $fieldname => $parameters) { - echo "\t\t\t\t\t".'"'.$fieldname.'" => array('; - - $data = ""; - foreach ($parameters AS $name => $value) { - if ($data != "") - $data .= ", "; - $data .= '"'.$name.'" => "'.$value.'"'; - } - - echo $data."),\n"; - } - echo "\t\t\t\t\t),\n"; - echo "\t\t\t".'"indexes" => array('."\n"; - foreach ($structure["indexes"] AS $indexname => $fieldnames) { - echo "\t\t\t\t\t".'"'.$indexname.'" => array("'.implode($fieldnames, '","').'"'."),\n"; - } - echo "\t\t\t\t\t)\n"; - echo "\t\t\t);\n"; + echo "\n"; } } -function update_structure($verbose, $action) { +function update_structure($verbose, $action, $tables=null, $definition=null) { global $a, $db; $errors = false; @@ -142,7 +130,8 @@ function update_structure($verbose, $action) { // Get the current structure $database = array(); - $tables = q("show tables"); + if (is_null($tables)) + $tables = q("show tables"); foreach ($tables AS $table) { $table = current($table); @@ -151,7 +140,8 @@ function update_structure($verbose, $action) { } // Get the definition - $definition = db_definition(); + if (is_null($definition)) + $definition = db_definition(); // Compare it foreach ($definition AS $name => $structure) { @@ -161,9 +151,9 @@ function update_structure($verbose, $action) { if(false === $r) $errors .= t('Errors encountered creating database tables.').$name.EOL; } else { - // Drop the index if it isn't present in the definition + // Drop the index if it isn't present in the definition and index name doesn't start with "local_" foreach ($database[$name]["indexes"] AS $indexname => $fieldnames) - if (!isset($structure["indexes"][$indexname])) { + if (!isset($structure["indexes"][$indexname]) && substr($indexname, 0, 6) != 'local_') { $sql2=db_drop_index($indexname); if ($sql3 == "") $sql3 = "ALTER TABLE `".$name."` ".$sql2; @@ -231,9 +221,13 @@ function db_field_command($parameters, $create = true) { if ($parameters["not null"]) $fieldstruct .= " NOT NULL"; - if (isset($parameters["default"])) - $fieldstruct .= " DEFAULT '".$parameters["default"]."'"; - + if (isset($parameters["default"])){ + if (strpos(strtolower($parameters["type"]),"int")!==false) { + $fieldstruct .= " DEFAULT ".$parameters["default"]; + } else { + $fieldstruct .= " DEFAULT '".$parameters["default"]."'"; + } + } if ($parameters["extra"] != "") $fieldstruct .= " ".$parameters["extra"]; @@ -243,20 +237,28 @@ function db_field_command($parameters, $create = true) { return($fieldstruct); } -function db_create_table($name, $fields, $verbose, $action) { +function db_create_table($name, $fields, $verbose, $action, $indexes=null) { global $a, $db; $r = true; $sql = ""; + $sql_rows = array(); foreach($fields AS $fieldname => $field) { - if ($sql != "") - $sql .= ",\n"; + $sql_rows[] = "`".dbesc($fieldname)."` ".db_field_command($field); + } + + if (!is_null($indexes)) { - $sql .= "`".dbesc($fieldname)."` ".db_field_command($field); + foreach ($indexes AS $indexname => $fieldnames) { + $sql_index = db_create_index($indexname, $fieldnames, ""); + if (!is_null($sql_index)) $sql_rows[] = $sql_index; + } } - $sql = sprintf("CREATE TABLE IF NOT EXISTS `%s` (\n", dbesc($name)).$sql."\n) DEFAULT CHARSET=utf8"; + $sql = implode(",\n\t", $sql_rows); + + $sql = sprintf("CREATE TABLE IF NOT EXISTS `%s` (\n\t", dbesc($name)).$sql."\n) DEFAULT CHARSET=utf8"; if ($verbose) echo $sql.";\n"; @@ -282,7 +284,7 @@ function db_drop_index($indexname) { return($sql); } -function db_create_index($indexname, $fieldnames) { +function db_create_index($indexname, $fieldnames, $method="ADD") { if ($indexname == "PRIMARY") return; @@ -298,7 +300,13 @@ function db_create_index($indexname, $fieldnames) { $names .= "`".dbesc($fieldname)."`"; } - $sql = sprintf("ADD INDEX `%s` (%s)", dbesc($indexname), $names); + $method = strtoupper(trim($method)); + if ($method!="" && $method!="ADD") { + throw new Exception("Invalid parameter 'method' in db_create_index(): '$method'"); + killme(); + } + + $sql = sprintf("%s INDEX `%s` (%s)", $method, dbesc($indexname), $names); return($sql); } @@ -356,6 +364,7 @@ function db_definition() { "fields" => array( "k" => array("type" => "varchar(255)", "not null" => "1", "primary" => "1"), "v" => array("type" => "text", "not null" => "1"), + "expire_mode" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "updated" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), ), "indexes" => array( @@ -443,10 +452,12 @@ function db_definition() { "hub-verify" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "last-update" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "success_update" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "failure_update" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "name-date" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "uri-date" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "avatar-date" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "term-date" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "last-item" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "priority" => array("type" => "tinyint(3)", "not null" => "1", "default" => "0"), "blocked" => array("type" => "tinyint(1)", "not null" => "1", "default" => "1"), "readonly" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), @@ -616,21 +627,28 @@ function db_definition() { "fields" => array( "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), "name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), + "nick" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "nurl" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "connect" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), + "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "updated" => array("type" => "datetime", "default" => "0000-00-00 00:00:00"), + "last_contact" => array("type" => "datetime", "default" => "0000-00-00 00:00:00"), + "last_failure" => array("type" => "datetime", "default" => "0000-00-00 00:00:00"), "location" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "about" => array("type" => "text", "not null" => "1"), "keywords" => array("type" => "text", "not null" => "1"), "gender" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), + "community" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "network" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "generation" => array("type" => "tinyint(3)", "not null" => "1", "default" => "0"), + "server_url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), ), "indexes" => array( "PRIMARY" => array("id"), "nurl" => array("nurl"), + "updated" => array("updated"), ) ); $database["glink"] = array( @@ -674,14 +692,42 @@ function db_definition() { "uid_gid_contactid" => array("uid","gid","contact-id"), ) ); + $database["gserver"] = array( + "fields" => array( + "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), + "url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), + "nurl" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), + "version" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), + "site_name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), + "info" => array("type" => "text", "not null" => "1"), + "register_policy" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), + "poco" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), + "noscrape" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), + "network" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), + "platform" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), + "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "last_poco_query" => array("type" => "datetime", "default" => "0000-00-00 00:00:00"), + "last_contact" => array("type" => "datetime", "default" => "0000-00-00 00:00:00"), + "last_failure" => array("type" => "datetime", "default" => "0000-00-00 00:00:00"), + ), + "indexes" => array( + "PRIMARY" => array("id"), + "nurl" => array("nurl"), + ) + ); $database["guid"] = array( "fields" => array( "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), "guid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), + "plink" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), + "uri" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), + "network" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), ), "indexes" => array( "PRIMARY" => array("id"), "guid" => array("guid"), + "plink" => array("plink"), + "uri" => array("uri"), ) ); $database["hook"] = array( @@ -776,6 +822,9 @@ function db_definition() { "last-child" => array("type" => "tinyint(1) unsigned", "not null" => "1", "default" => "1"), "mention" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "network" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), + "rendered-hash" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), + "rendered-html" => array("type" => "mediumtext", "not null" => "1"), + "global" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), ), "indexes" => array( "PRIMARY" => array("id"), @@ -913,6 +962,7 @@ function db_definition() { "msg" => array("type" => "mediumtext", "not null" => "1"), "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "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"), "seen" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "verb" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), @@ -1188,6 +1238,10 @@ function db_definition() { "type" => array("type" => "tinyint(3) unsigned", "not null" => "1", "default" => "0"), "term" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), + "guid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), + "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "received" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "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"), ), @@ -1196,8 +1250,9 @@ function db_definition() { "oid_otype_type_term" => array("oid","otype","type","term"), "uid_term_tid" => array("uid","term","tid"), "type_term" => array("type","term"), - "uid_otype_type_term_tid" => array("uid","otype","type","term","tid"), + "uid_otype_type_term_global_created" => array("uid","otype","type","term","global","created"), "otype_type_term_tid" => array("otype","type","term","tid"), + "guid" => array("guid"), ) ); $database["thread"] = array( @@ -1349,7 +1404,29 @@ function dbstructure_run(&$argv, &$argc) { unset($db_host, $db_user, $db_pass, $db_data); } - update_structure(true, true); + if ($argc==2) { + switch ($argv[1]) { + case "update": + update_structure(true, true); + return; + case "dumpsql": + print_structure(db_definition()); + return; + } + } + + + // print help + echo $argv[0]." \n"; + echo "\n"; + echo "commands:\n"; + echo "update update database schema\n"; + echo "dumpsql dump database schema\n"; + return; + + + + } if (array_search(__file__,get_included_files())===0){