]> git.mxchange.org Git - friendica.git/blobdiff - include/dbstructure.php
There is now a "global" field in the item table that tells if this item is present...
[friendica.git] / include / dbstructure.php
index 309b7e05aff42064146edaa7eb812e4ee02fb845..c078e405102332ac32005e5653e45ead93190597 100644 (file)
@@ -1,32 +1,71 @@
 <?php
-
 require_once("boot.php");
+require_once("include/text.php");
 
-function dbstructure_run(&$argv, &$argc) {
-       global $a, $db;
+define('NEW_UPDATE_ROUTINE_VERSION', 1170);
 
-       if(is_null($a)){
-               $a = new App;
-       }
+/*
+ * send the email and do what is needed to do on update fails
+ *
+ * @param update_id            (int) number of failed update
+ * @param error_message        (str) error message
+ */
+function update_fail($update_id, $error_message){
+       //send the administrators an e-mail
+       $admin_mail_list = "'".implode("','", array_map(dbesc, explode(",", str_replace(" ", "", $a->config['admin_email']))))."'";
+       $adminlist = q("SELECT uid, language, email FROM user WHERE email IN (%s)",
+               $admin_mail_list
+       );
 
-       if(is_null($db)) {
-               @include(".htconfig.php");
-               require_once("include/dba.php");
-               $db = new dba($db_host, $db_user, $db_pass, $db_data);
-                       unset($db_host, $db_user, $db_pass, $db_data);
+       // every admin could had different language
+
+       foreach ($adminlist as $admin) {
+               $lang = (($admin['language'])?$admin['language']:'en');
+               push_lang($lang);
+
+               $preamble = deindent(t("
+                       The friendica developers released update %s recently,
+                       but when I tried to install it, something went terribly wrong.
+                       This needs to be fixed soon and I can't do it alone. Please contact a
+                       friendica developer if you can not help me on your own. My database might be invalid."));
+               $body = t("The error message is\n[pre]%s[/pre]");
+               $preamble = sprintf($preamble, $update_id);
+               $body = sprintf($body, $error_message);
+
+               notification(array(
+                       'type' => "SYSTEM_EMAIL",
+                       'to_email' => $admin['email'],
+                       'preamble' => $preamble,
+                       'body' => $body,
+                       'language' => $lang,
+               ));
        }
 
-       load_config('config');
-       load_config('system');
 
-       update_structure($a);
-}
 
-if (array_search(__file__,get_included_files())===0){
-       dbstructure_run($argv,$argc);
-       killme();
+
+       /*
+       $email_tpl = get_intltext_template("update_fail_eml.tpl");
+       $email_msg = replace_macros($email_tpl, array(
+               '$sitename' => $a->config['sitename'],
+               '$siteurl' =>  $a->get_baseurl(),
+               '$update' => DB_UPDATE_VERSION,
+               '$error' => sprintf(t('Update %s failed. See error logs.'), DB_UPDATE_VERSION)
+       ));
+       $subject=sprintf(t('Update Error at %s'), $a->get_baseurl());
+       require_once('include/email.php');
+       $subject = email_header_encode($subject,'UTF-8');
+       mail($a->config['admin_email'], $subject, $email_msg,
+               'From: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME']."\n"
+               .'Content-type: text/plain; charset=UTF-8'."\n"
+               .'Content-transfer-encoding: 8bit');
+       */
+       //try the logger
+       logger("CRITICAL: Database structure update failed: ".$retval);
+       break;
 }
 
+
 function table_structure($table) {
        $structures = q("DESCRIBE `%s`", $table);
 
@@ -53,7 +92,7 @@ function table_structure($table) {
                        if ($field["Null"] == "NO")
                                $fielddata[$field["Field"]]["not null"] = true;
 
-                       if ($field["Default"] != "")
+                       if (isset($field["Default"]))
                                $fielddata[$field["Field"]]["default"] = $field["Default"];
 
                        if ($field["Extra"] != "")
@@ -63,13 +102,12 @@ function table_structure($table) {
                                $fielddata[$field["Field"]]["primary"] = true;
                }
        }
-
        return(array("fields"=>$fielddata, "indexes"=>$indexdata));
 }
 
-function print_structure($db) {
-       foreach ($db AS $name => $structure) {
-               echo "\t".'$db["'.$name."\"] = array(\n";
+function print_structure($database) {
+       foreach ($database AS $name => $structure) {
+               echo "\t".'$database["'.$name."\"] = array(\n";
 
                echo "\t\t\t".'"fields" => array('."\n";
                foreach ($structure["fields"] AS $fieldname => $parameters) {
@@ -94,17 +132,22 @@ function print_structure($db) {
        }
 }
 
-function update_structure($a) {
+function update_structure($verbose, $action) {
+       global $a, $db;
+
+       $errors = false;
+
+       logger('updating structure', LOGGER_DEBUG);
 
        // Get the current structure
-       $db = array();
+       $database = array();
 
        $tables = q("show tables");
 
        foreach ($tables AS $table) {
                $table = current($table);
 
-               $db[$table] = table_structure($table);
+               $database[$table] = table_structure($table);
        }
 
        // Get the definition
@@ -112,34 +155,74 @@ function update_structure($a) {
 
        // Compare it
        foreach ($definition AS $name => $structure) {
-               if (!isset($db[$name]))
-                       db_create_table($name, $structure["fields"]);
-               else {
+               $sql3="";
+               if (!isset($database[$name])) {
+                       $r = db_create_table($name, $structure["fields"], $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
+                       foreach ($database[$name]["indexes"] AS $indexname => $fieldnames)
+                               if (!isset($structure["indexes"][$indexname])) {
+                                       $sql2=db_drop_index($indexname);
+                                       if ($sql3 == "")
+                                               $sql3 = "ALTER TABLE `".$name."` ".$sql2;
+                                       else
+                                               $sql3 .= ", ".$sql2;
+                               }
+
                        // Compare the field structure field by field
                        foreach ($structure["fields"] AS $fieldname => $parameters) {
-                               if (!isset($db[$name]["fields"][$fieldname]))
-                                       db_add_table_field($name, $fieldname, $parameters);
-                               else {
+                               if (!isset($database[$name]["fields"][$fieldname])) {
+                                       $sql2=db_add_table_field($fieldname, $parameters);
+                                       if ($sql3 == "")
+                                               $sql3 = "ALTER TABLE `".$name."` ".$sql2;
+                                       else
+                                               $sql3 .= ", ".$sql2;
+                               } else {
                                        // Compare the field definition
-                                       $current_field_definition = implode($db[$name]["fields"][$fieldname]);
-                                       $new_field_definition = implode($parameters);
-                                       if ($current_field_definition != $new_field_definition)
-                                               db_modify_table_field($name, $fieldname, $parameters);
+                                       $current_field_definition = implode(",",$database[$name]["fields"][$fieldname]);
+                                       $new_field_definition = implode(",",$parameters);
+                                       if ($current_field_definition != $new_field_definition) {
+                                               $sql2=db_modify_table_field($fieldname, $parameters);
+                                               if ($sql3 == "")
+                                                       $sql3 = "ALTER TABLE `".$name."` ".$sql2;
+                                               else
+                                                       $sql3 .= ", ".$sql2;
+                                       }
+
                                }
                        }
                }
 
-               // Drop the index if it isn't present in the definition
-               if (isset($db[$name]))
-                       foreach ($db[$name]["indexes"] AS $indexname => $fieldnames)
-                               if (!isset($structure["indexes"][$indexname]))
-                                       db_drop_index($name, $indexname);
-
                // Create the index
-               foreach ($structure["indexes"] AS $indexname => $fieldnames)
-                       if (!isset($db[$name]["indexes"][$indexname]))
-                               db_create_index($name, $indexname, $fieldnames);
+               foreach ($structure["indexes"] AS $indexname => $fieldnames) {
+                       if (!isset($database[$name]["indexes"][$indexname])) {
+                               $sql2=db_create_index($indexname, $fieldnames);
+                               if ($sql2 != "") {
+                                       if ($sql3 == "")
+                                               $sql3 = "ALTER TABLE `".$name."` ".$sql2;
+                                       else
+                                               $sql3 .= ", ".$sql2;
+                               }
+                       }
+               }
+
+               if ($sql3 != "") {
+                       $sql3 .= ";";
+
+                       if ($verbose)
+                               echo $sql3."\n";
+
+                       if ($action) {
+                               $r = @$db->q($sql3);
+                               if(false === $r)
+                                       $errors .= t('Errors encountered performing database changes.').$sql3.EOL;
+                       }
+               }
        }
+
+       return $errors;
 }
 
 function db_field_command($parameters, $create = true) {
@@ -148,7 +231,7 @@ function db_field_command($parameters, $create = true) {
        if ($parameters["not null"])
                $fieldstruct .= " NOT NULL";
 
-       if ($parameters["default"] != "")
+       if (isset($parameters["default"]))
                $fieldstruct .= " DEFAULT '".$parameters["default"]."'";
 
        if ($parameters["extra"] != "")
@@ -160,7 +243,11 @@ function db_field_command($parameters, $create = true) {
        return($fieldstruct);
 }
 
-function db_create_table($name, $fields) {
+function db_create_table($name, $fields, $verbose, $action) {
+       global $a, $db;
+
+       $r = true;
+
        $sql = "";
        foreach($fields AS $fieldname => $field) {
                if ($sql != "")
@@ -170,29 +257,32 @@ function db_create_table($name, $fields) {
        }
 
        $sql = sprintf("CREATE TABLE IF NOT EXISTS `%s` (\n", dbesc($name)).$sql."\n) DEFAULT CHARSET=utf8";
-       echo $sql.";\n";
-       //$ret = q($sql);
+
+       if ($verbose)
+               echo $sql.";\n";
+
+       if ($action)
+               $r = @$db->q($sql);
+
+       return $r;
 }
 
-function db_add_table_field($name, $fieldname, $parameters) {
-       $sql = sprintf("ALTER TABLE `%s` ADD `%s` %s", dbesc($name), dbesc($fieldname), db_field_command($parameters));
-       echo $sql.";\n";
-       //$ret = q($sql);
+function db_add_table_field($fieldname, $parameters) {
+       $sql = sprintf("ADD `%s` %s", dbesc($fieldname), db_field_command($parameters));
+       return($sql);
 }
 
-function db_modify_table_field($name, $fieldname, $parameters) {
-       $sql = sprintf("ALTER TABLE `%s` MODIFY `%s` %s", dbesc($name), dbesc($fieldname), db_field_command($parameters, false));
-       echo $sql.";\n";
-       //$ret = q($sql);
+function db_modify_table_field($fieldname, $parameters) {
+       $sql = sprintf("MODIFY `%s` %s", dbesc($fieldname), db_field_command($parameters, false));
+       return($sql);
 }
 
-function db_drop_index($name, $indexname) {
-       $sql = sprintf("DROP INDEX `%s` ON `%s`", dbesc($indexname), dbesc($name));
-       echo $sql.";\n";
-       //$ret = q($sql);
+function db_drop_index($indexname) {
+       $sql = sprintf("DROP INDEX `%s`", dbesc($indexname));
+       return($sql);
 }
 
-function db_create_index($name, $indexname, $fieldnames) {
+function db_create_index($indexname, $fieldnames) {
 
        if ($indexname == "PRIMARY")
                return;
@@ -208,20 +298,19 @@ function db_create_index($name, $indexname, $fieldnames) {
                        $names .= "`".dbesc($fieldname)."`";
        }
 
-       $sql = sprintf("CREATE INDEX `%s` ON `%s`(%s)", dbesc($indexname), dbesc($name), $names);
-       echo $sql."\n";
-       //$ret = q($sql);
+       $sql = sprintf("ADD INDEX `%s` (%s)", dbesc($indexname), $names);
+       return($sql);
 }
 
 function db_definition() {
 
-       $db = array();
+       $database = array();
 
-       $db["addon"] = array(
+       $database["addon"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "name" => array("type" => "char(255)", "not null" => "1"),
-                                       "version" => array("type" => "char(255)", "not null" => "1"),
+                                       "name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "version" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "installed" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "hidden" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "timestamp" => array("type" => "bigint(20)", "not null" => "1", "default" => "0"),
@@ -231,14 +320,14 @@ function db_definition() {
                                        "PRIMARY" => array("id"),
                                        )
                        );
-       $db["attach"] = array(
+       $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"),
-                                       "hash" => array("type" => "char(64)", "not null" => "1"),
-                                       "filename" => array("type" => "char(255)", "not null" => "1"),
-                                       "filetype" => array("type" => "char(64)", "not null" => "1"),
-                                       "filesize" => array("type" => "int(11)", "not null" => "1"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "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" => ""),
+                                       "filesize" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
                                        "data" => array("type" => "longblob", "not null" => "1"),
                                        "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
                                        "edited" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
@@ -251,47 +340,47 @@ function db_definition() {
                                        "PRIMARY" => array("id"),
                                        )
                        );
-       $db["auth_codes"] = array(
+       $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"),
-                                       "redirect_uri" => array("type" => "varchar(200)", "not null" => "1"),
-                                       "expires" => array("type" => "int(11)", "not null" => "1"),
-                                       "scope" => array("type" => "varchar(250)", "not null" => "1"),
+                                       "client_id" => array("type" => "varchar(20)", "not null" => "1", "default" => ""),
+                                       "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" => ""),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
                                        )
                        );
-       $db["cache"] = array(
+       $database["cache"] = array(
                        "fields" => array(
-                                       "k" => array("type" => "char(255)", "not null" => "1", "primary" => "1"),
+                                       "k" => array("type" => "varchar(255)", "not null" => "1", "primary" => "1"),
                                        "v" => array("type" => "text", "not null" => "1"),
-                                       "updated" => array("type" => "datetime", "not null" => "1"),
+                                       "updated" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("k"),
                                        "updated" => array("updated"),
                                        )
                        );
-       $db["challenge"] = array(
+       $database["challenge"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "challenge" => array("type" => "char(255)", "not null" => "1"),
-                                       "dfrn-id" => array("type" => "char(255)", "not null" => "1"),
-                                       "expire" => array("type" => "int(11)", "not null" => "1"),
-                                       "type" => array("type" => "char(255)", "not null" => "1"),
-                                       "last_update" => array("type" => "char(255)", "not null" => "1"),
+                                       "challenge" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "dfrn-id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "expire" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "type" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "last_update" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
                                        )
                        );
-       $db["clients"] = array(
+       $database["clients"] = array(
                        "fields" => array(
                                        "client_id" => array("type" => "varchar(20)", "not null" => "1", "primary" => "1"),
-                                       "pw" => array("type" => "varchar(20)", "not null" => "1"),
-                                       "redirect_uri" => array("type" => "varchar(200)", "not null" => "1"),
+                                       "pw" => array("type" => "varchar(20)", "not null" => "1", "default" => ""),
+                                       "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"),
@@ -300,44 +389,48 @@ function db_definition() {
                                        "PRIMARY" => array("client_id"),
                                        )
                        );
-       $db["config"] = array(
+       $database["config"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "cat" => array("type" => "char(255)", "not null" => "1"),
-                                       "k" => array("type" => "char(255)", "not null" => "1"),
+                                       "cat" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "k" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "v" => array("type" => "text", "not null" => "1"),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
-                                       "access" => array("cat","k"),
+                                       "cat_k" => array("cat(30)","k(30)"),
                                        )
                        );
-       $db["contact"] = array(
+       $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"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
                                        "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
                                        "self" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "remote_self" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "rel" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "duplex" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
-                                       "network" => array("type" => "char(255)", "not null" => "1"),
-                                       "name" => array("type" => "char(255)", "not null" => "1"),
-                                       "nick" => array("type" => "char(255)", "not null" => "1"),
-                                       "attag" => array("type" => "char(255)", "not null" => "1"),
+                                       "network" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "nick" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "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" => ""),
+                                       "attag" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "photo" => array("type" => "text", "not null" => "1"),
                                        "thumb" => array("type" => "text", "not null" => "1"),
                                        "micro" => array("type" => "text", "not null" => "1"),
                                        "site-pubkey" => array("type" => "text", "not null" => "1"),
-                                       "issued-id" => array("type" => "char(255)", "not null" => "1"),
-                                       "dfrn-id" => array("type" => "char(255)", "not null" => "1"),
-                                       "url" => array("type" => "char(255)", "not null" => "1"),
-                                       "nurl" => array("type" => "char(255)", "not null" => "1"),
-                                       "addr" => array("type" => "char(255)", "not null" => "1"),
-                                       "alias" => array("type" => "char(255)", "not null" => "1"),
+                                       "issued-id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "dfrn-id" => 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" => ""),
+                                       "addr" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "alias" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "pubkey" => array("type" => "text", "not null" => "1"),
                                        "prvkey" => array("type" => "text", "not null" => "1"),
-                                       "batch" => array("type" => "char(255)", "not null" => "1"),
+                                       "batch" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "request" => array("type" => "text", "not null" => "1"),
                                        "notify" => array("type" => "text", "not null" => "1"),
                                        "poll" => array("type" => "text", "not null" => "1"),
@@ -347,14 +440,14 @@ function db_definition() {
                                        "ret-aes" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "usehub" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "subhub" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
-                                       "hub-verify" => array("type" => "char(255)", "not null" => "1"),
+                                       "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"),
                                        "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"),
-                                       "priority" => array("type" => "tinyint(3)", "not null" => "1"),
+                                       "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"),
                                        "writable" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
@@ -368,23 +461,24 @@ function db_definition() {
                                        "closeness" => array("type" => "tinyint(2)", "not null" => "1", "default" => "99"),
                                        "info" => array("type" => "mediumtext", "not null" => "1"),
                                        "profile-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
-                                       "bdyear" => array("type" => "char(4)", "not null" => "1"),
-                                       "bd" => array("type" => "date", "not null" => "1"),
+                                       "bdyear" => array("type" => "varchar(4)", "not null" => "1", "default" => ""),
+                                       "bd" => array("type" => "date", "not null" => "1", "default" => "0000-00-00"),
                                        "notify_new_posts" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "fetch_further_information" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
+                                       "ffi_keyword_blacklist" => array("type" => "mediumtext", "not null" => "1"),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
                                        "uid" => array("uid"),
                                        )
                        );
-       $db["conv"] = array(
+       $database["conv"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "guid" => array("type" => "char(64)", "not null" => "1"),
+                                       "guid" => array("type" => "varchar(64)", "not null" => "1", "default" => ""),
                                        "recips" => array("type" => "mediumtext", "not null" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1"),
-                                       "creator" => array("type" => "char(255)", "not null" => "1"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "creator" => 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", "not null" => "1", "default" => "0000-00-00 00:00:00"),
                                        "subject" => array("type" => "mediumtext", "not null" => "1"),
@@ -394,42 +488,42 @@ function db_definition() {
                                        "uid" => array("uid"),
                                        )
                        );
-       $db["deliverq"] = array(
+       $database["deliverq"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "cmd" => array("type" => "char(32)", "not null" => "1"),
-                                       "item" => array("type" => "int(11)", "not null" => "1"),
-                                       "contact" => array("type" => "int(11)", "not null" => "1"),
+                                       "cmd" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
+                                       "item" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "contact" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
                                        )
                        );
-       $db["dsprphotoq"] = array(
+       $database["dsprphotoq"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
                                        "msg" => array("type" => "mediumtext", "not null" => "1"),
-                                       "attempt" => array("type" => "tinyint(4)", "not null" => "1"),
+                                       "attempt" => array("type" => "tinyint(4)", "not null" => "1", "default" => "0"),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
                                        )
                        );
-       $db["event"] = array(
+       $database["event"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1"),
-                                       "cid" => array("type" => "int(11)", "not null" => "1"),
-                                       "uri" => array("type" => "char(255)", "not null" => "1"),
-                                       "created" => array("type" => "datetime", "not null" => "1"),
-                                       "edited" => array("type" => "datetime", "not null" => "1"),
-                                       "start" => array("type" => "datetime", "not null" => "1"),
-                                       "finish" => array("type" => "datetime", "not null" => "1"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "cid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "uri" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
+                                       "edited" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
+                                       "start" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
+                                       "finish" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
                                        "summary" => array("type" => "text", "not null" => "1"),
                                        "desc" => array("type" => "text", "not null" => "1"),
                                        "location" => array("type" => "text", "not null" => "1"),
-                                       "type" => array("type" => "char(255)", "not null" => "1"),
+                                       "type" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "nofinish" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "adjust" => array("type" => "tinyint(1)", "not null" => "1", "default" => "1"),
                                        "ignore" => array("type" => "tinyint(1) unsigned", "not null" => "1", "default" => "0"),
@@ -443,22 +537,22 @@ function db_definition() {
                                        "uid" => array("uid"),
                                        )
                        );
-       $db["fcontact"] = array(
+       $database["fcontact"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "url" => array("type" => "char(255)", "not null" => "1"),
-                                       "name" => array("type" => "char(255)", "not null" => "1"),
-                                       "photo" => array("type" => "char(255)", "not null" => "1"),
-                                       "request" => array("type" => "char(255)", "not null" => "1"),
-                                       "nick" => array("type" => "char(255)", "not null" => "1"),
-                                       "addr" => array("type" => "char(255)", "not null" => "1"),
-                                       "batch" => array("type" => "char(255)", "not null" => "1"),
-                                       "notify" => array("type" => "char(255)", "not null" => "1"),
-                                       "poll" => array("type" => "char(255)", "not null" => "1"),
-                                       "confirm" => array("type" => "char(255)", "not null" => "1"),
-                                       "priority" => array("type" => "tinyint(1)", "not null" => "1"),
-                                       "network" => array("type" => "char(32)", "not null" => "1"),
-                                       "alias" => array("type" => "char(255)", "not null" => "1"),
+                                       "url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "request" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "nick" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "addr" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "batch" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "notify" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "poll" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "confirm" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "priority" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
+                                       "network" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
+                                       "alias" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "pubkey" => array("type" => "text", "not null" => "1"),
                                        "updated" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
                                        ),
@@ -467,22 +561,22 @@ function db_definition() {
                                        "addr" => array("addr"),
                                        )
                        );
-       $db["ffinder"] = array(
+       $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"),
-                                       "cid" => array("type" => "int(10) unsigned", "not null" => "1"),
-                                       "fid" => array("type" => "int(10) unsigned", "not null" => "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"),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
                                        )
                        );
-       $db["fserver"] = array(
+       $database["fserver"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "server" => array("type" => "char(255)", "not null" => "1"),
-                                       "posturl" => array("type" => "char(255)", "not null" => "1"),
+                                       "server" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "posturl" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "key" => array("type" => "text", "not null" => "1"),
                                        ),
                        "indexes" => array(
@@ -490,27 +584,27 @@ function db_definition() {
                                        "server" => array("server"),
                                        )
                        );
-       $db["fsuggest"] = array(
+       $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"),
-                                       "cid" => array("type" => "int(11)", "not null" => "1"),
-                                       "name" => array("type" => "char(255)", "not null" => "1"),
-                                       "url" => array("type" => "char(255)", "not null" => "1"),
-                                       "request" => array("type" => "char(255)", "not null" => "1"),
-                                       "photo" => array("type" => "char(255)", "not null" => "1"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "cid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "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" => ""),
+                                       "photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "note" => array("type" => "text", "not null" => "1"),
-                                       "created" => array("type" => "datetime", "not null" => "1"),
+                                       "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
                                        )
                        );
-       $db["gcign"] = array(
+       $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"),
-                                       "gcid" => array("type" => "int(11)", "not null" => "1"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "gcid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
@@ -518,28 +612,35 @@ function db_definition() {
                                        "gcid" => array("gcid"),
                                        )
                        );
-       $db["gcontact"] = array(
+       $database["gcontact"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "name" => array("type" => "char(255)", "not null" => "1"),
-                                       "url" => array("type" => "char(255)", "not null" => "1"),
-                                       "nurl" => array("type" => "char(255)", "not null" => "1"),
-                                       "photo" => array("type" => "char(255)", "not null" => "1"),
-                                       "connect" => array("type" => "char(255)", "not null" => "1"),
+                                       "name" => 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" => ""),
+                                       "updated" => 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" => ""),
+                                       "network" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "generation" => array("type" => "tinyint(3)", "not null" => "1", "default" => "0"),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
                                        "nurl" => array("nurl"),
                                        )
                        );
-       $db["glink"] = array(
+       $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"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1"),
-                                       "gcid" => array("type" => "int(11)", "not null" => "1"),
-                                       "zcid" => array("type" => "int(11)", "not null" => "1"),
-                                       "updated" => array("type" => "datetime", "not null" => "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"),
+                                       "updated" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
@@ -548,65 +649,65 @@ function db_definition() {
                                        "zcid" => array("zcid"),
                                        )
                        );
-       $db["group"] = array(
+       $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"),
+                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
                                        "visible" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "deleted" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
-                                       "name" => array("type" => "char(255)", "not null" => "1"),
+                                       "name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
                                        "uid" => array("uid"),
                                        )
                        );
-       $db["group_member"] = array(
+       $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"),
-                                       "gid" => array("type" => "int(10) unsigned", "not null" => "1"),
-                                       "contact-id" => array("type" => "int(10) unsigned", "not null" => "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"),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
                                        "uid_gid_contactid" => array("uid","gid","contact-id"),
                                        )
                        );
-       $db["guid"] = array(
+       $database["guid"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "guid" => array("type" => "char(64)", "not null" => "1"),
+                                       "guid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
                                        "guid" => array("guid"),
                                        )
                        );
-       $db["hook"] = array(
+       $database["hook"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "hook" => array("type" => "char(255)", "not null" => "1"),
-                                       "file" => array("type" => "char(255)", "not null" => "1"),
-                                       "function" => array("type" => "char(255)", "not null" => "1"),
+                                       "hook" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "file" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "function" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "priority" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
-                                       "hook_file_function" => array("hook","file","function"),
+                                       "hook_file_function" => array("hook(30)","file(60)","function(30)"),
                                        )
                        );
-       $db["intro"] = array(
+       $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"),
+                                       "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"),
-                                       "knowyou" => array("type" => "tinyint(1)", "not null" => "1"),
+                                       "contact-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "knowyou" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "duplex" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "note" => array("type" => "text", "not null" => "1"),
-                                       "hash" => array("type" => "char(255)", "not null" => "1"),
-                                       "datetime" => array("type" => "datetime", "not null" => "1"),
+                                       "hash" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "datetime" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
                                        "blocked" => array("type" => "tinyint(1)", "not null" => "1", "default" => "1"),
                                        "ignore" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        ),
@@ -614,49 +715,49 @@ function db_definition() {
                                        "PRIMARY" => array("id"),
                                        )
                        );
-       $db["item"] = array(
+       $database["item"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "guid" => array("type" => "char(64)", "not null" => "1"),
-                                       "uri" => array("type" => "char(255)", "not null" => "1"),
+                                       "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"),
-                                       "type" => array("type" => "char(255)", "not null" => "1"),
+                                       "contact-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "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-uri" => array("type" => "char(255)", "not null" => "1"),
-                                       "extid" => array("type" => "char(255)", "not null" => "1"),
-                                       "thr-parent" => array("type" => "char(255)", "not null" => "1"),
+                                       "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" => ""),
                                        "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
                                        "edited" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
                                        "commented" => 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"),
                                        "changed" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
-                                       "owner-name" => array("type" => "char(255)", "not null" => "1"),
-                                       "owner-link" => array("type" => "char(255)", "not null" => "1"),
-                                       "owner-avatar" => array("type" => "char(255)", "not null" => "1"),
-                                       "author-name" => array("type" => "char(255)", "not null" => "1"),
-                                       "author-link" => array("type" => "char(255)", "not null" => "1"),
-                                       "author-avatar" => array("type" => "char(255)", "not null" => "1"),
-                                       "title" => array("type" => "char(255)", "not null" => "1"),
+                                       "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-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" => ""),
+                                       "title" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "body" => array("type" => "mediumtext", "not null" => "1"),
-                                       "app" => array("type" => "char(255)", "not null" => "1"),
-                                       "verb" => array("type" => "char(255)", "not null" => "1"),
-                                       "object-type" => array("type" => "char(255)", "not null" => "1"),
+                                       "app" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "verb" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "object-type" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "object" => array("type" => "text", "not null" => "1"),
-                                       "target-type" => array("type" => "char(255)", "not null" => "1"),
+                                       "target-type" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "target" => array("type" => "text", "not null" => "1"),
                                        "postopts" => array("type" => "text", "not null" => "1"),
-                                       "plink" => array("type" => "char(255)", "not null" => "1"),
-                                       "resource-id" => array("type" => "char(255)", "not null" => "1"),
-                                       "event-id" => array("type" => "int(11)", "not null" => "1"),
+                                       "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"),
                                        "tag" => array("type" => "mediumtext", "not null" => "1"),
                                        "attach" => array("type" => "mediumtext", "not null" => "1"),
                                        "inform" => array("type" => "mediumtext", "not null" => "1"),
                                        "file" => array("type" => "mediumtext", "not null" => "1"),
-                                       "location" => array("type" => "char(255)", "not null" => "1"),
-                                       "coord" => array("type" => "char(255)", "not null" => "1"),
+                                       "location" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "coord" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "allow_cid" => array("type" => "mediumtext", "not null" => "1"),
                                        "allow_gid" => array("type" => "mediumtext", "not null" => "1"),
                                        "deny_cid" => array("type" => "mediumtext", "not null" => "1"),
@@ -674,7 +775,10 @@ function db_definition() {
                                        "forum_mode" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "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" => "char(32)", "not null" => "1"),
+                                       "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"),
@@ -712,13 +816,13 @@ function db_definition() {
                                        "uid_ownerlink" => array("uid","owner-link"),
                                        )
                        );
-       $db["item_id"] = array(
+       $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"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1"),
-                                       "sid" => array("type" => "char(255)", "not null" => "1"),
-                                       "service" => array("type" => "char(255)", "not null" => "1"),
+                                       "iid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "sid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "service" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
@@ -728,34 +832,35 @@ function db_definition() {
                                        "iid" => array("iid"),
                                        )
                        );
-       $db["locks"] = array(
+       $database["locks"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "name" => array("type" => "char(128)", "not null" => "1"),
+                                       "name" => array("type" => "varchar(128)", "not null" => "1", "default" => ""),
                                        "locked" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
+                                       "created" => array("type" => "datetime", "default" => "0000-00-00 00:00:00"),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
                                        )
                        );
-       $db["mail"] = array(
+       $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"),
-                                       "guid" => array("type" => "char(64)", "not null" => "1"),
-                                       "from-name" => array("type" => "char(255)", "not null" => "1"),
-                                       "from-photo" => array("type" => "char(255)", "not null" => "1"),
-                                       "from-url" => array("type" => "char(255)", "not null" => "1"),
-                                       "contact-id" => array("type" => "char(255)", "not null" => "1"),
-                                       "convid" => array("type" => "int(11) unsigned", "not null" => "1"),
-                                       "title" => array("type" => "char(255)", "not null" => "1"),
+                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
+                                       "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"),
+                                       "title" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "body" => array("type" => "mediumtext", "not null" => "1"),
-                                       "seen" => array("type" => "tinyint(1)", "not null" => "1"),
+                                       "seen" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "reply" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
-                                       "replied" => array("type" => "tinyint(1)", "not null" => "1"),
+                                       "replied" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "unknown" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
-                                       "uri" => array("type" => "char(255)", "not null" => "1"),
-                                       "parent-uri" => array("type" => "char(255)", "not null" => "1"),
+                                       "uri" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "parent-uri" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
                                        ),
                        "indexes" => array(
@@ -768,19 +873,19 @@ function db_definition() {
                                        "parent-uri" => array("parent-uri"),
                                        )
                        );
-       $db["mailacct"] = array(
+       $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"),
-                                       "server" => array("type" => "char(255)", "not null" => "1"),
-                                       "port" => array("type" => "int(11)", "not null" => "1"),
-                                       "ssltype" => array("type" => "char(16)", "not null" => "1"),
-                                       "mailbox" => array("type" => "char(255)", "not null" => "1"),
-                                       "user" => array("type" => "char(255)", "not null" => "1"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "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" => ""),
+                                       "mailbox" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "user" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "pass" => array("type" => "text", "not null" => "1"),
-                                       "reply_to" => array("type" => "char(255)", "not null" => "1"),
-                                       "action" => array("type" => "int(11)", "not null" => "1"),
-                                       "movetofolder" => array("type" => "char(255)", "not null" => "1"),
+                                       "reply_to" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "action" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "movetofolder" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "pubmail" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "last_check" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
                                        ),
@@ -788,46 +893,46 @@ function db_definition() {
                                        "PRIMARY" => array("id"),
                                        )
                        );
-       $db["manage"] = array(
+       $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"),
-                                       "mid" => array("type" => "int(11)", "not null" => "1"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "mid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
                                        "uid_mid" => array("uid","mid"),
                                        )
                        );
-       $db["notify"] = array(
+       $database["notify"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "hash" => array("type" => "char(64)", "not null" => "1"),
-                                       "type" => array("type" => "int(11)", "not null" => "1"),
-                                       "name" => array("type" => "char(255)", "not null" => "1"),
-                                       "url" => array("type" => "char(255)", "not null" => "1"),
-                                       "photo" => array("type" => "char(255)", "not null" => "1"),
-                                       "date" => array("type" => "datetime", "not null" => "1"),
+                                       "hash" => array("type" => "varchar(64)", "not null" => "1", "default" => ""),
+                                       "type" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "date" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
                                        "msg" => array("type" => "mediumtext", "not null" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1"),
-                                       "link" => array("type" => "char(255)", "not null" => "1"),
-                                       "parent" => array("type" => "int(11)", "not null" => "1"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "link" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "parent" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
                                        "seen" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
-                                       "verb" => array("type" => "char(255)", "not null" => "1"),
-                                       "otype" => array("type" => "char(16)", "not null" => "1"),
+                                       "verb" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "otype" => array("type" => "varchar(16)", "not null" => "1", "default" => ""),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
                                        "uid" => array("uid"),
                                        )
                        );
-       $db["notify-threads"] = array(
+       $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"),
+                                       "notify-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
                                        "master-parent-item" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
                                        "parent-item" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
-                                       "receiver-uid" => array("type" => "int(11)", "not null" => "1"),
+                                       "receiver-uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
@@ -835,38 +940,38 @@ function db_definition() {
                                        "receiver-uid" => array("receiver-uid"),
                                        )
                        );
-       $db["pconfig"] = array(
+       $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"),
-                                       "cat" => array("type" => "char(255)", "not null" => "1"),
-                                       "k" => array("type" => "char(255)", "not null" => "1"),
+                                       "cat" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "k" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "v" => array("type" => "mediumtext", "not null" => "1"),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
-                                       "access" => array("uid","cat","k"),
+                                       "uid_cat_k" => array("uid","cat(30)","k(30)"),
                                        )
                        );
-       $db["photo"] = array(
+       $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"),
+                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
                                        "contact-id" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
-                                       "guid" => array("type" => "char(64)", "not null" => "1"),
-                                       "resource-id" => array("type" => "char(255)", "not null" => "1"),
-                                       "created" => array("type" => "datetime", "not null" => "1"),
-                                       "edited" => array("type" => "datetime", "not null" => "1"),
-                                       "title" => array("type" => "char(255)", "not null" => "1"),
+                                       "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" => "0000-00-00 00:00:00"),
+                                       "edited" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
+                                       "title" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "desc" => array("type" => "text", "not null" => "1"),
-                                       "album" => array("type" => "char(255)", "not null" => "1"),
-                                       "filename" => array("type" => "char(255)", "not null" => "1"),
-                                       "type" => array("type" => "char(128)", "not null" => "1", "default" => "image/jpeg"),
-                                       "height" => array("type" => "smallint(6)", "not null" => "1"),
-                                       "width" => array("type" => "smallint(6)", "not null" => "1"),
+                                       "album" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "filename" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "type" => array("type" => "varchar(128)", "not null" => "1", "default" => "image/jpeg"),
+                                       "height" => array("type" => "smallint(6)", "not null" => "1", "default" => "0"),
+                                       "width" => array("type" => "smallint(6)", "not null" => "1", "default" => "0"),
                                        "datasize" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
                                        "data" => array("type" => "mediumblob", "not null" => "1"),
-                                       "scale" => array("type" => "tinyint(3)", "not null" => "1"),
+                                       "scale" => array("type" => "tinyint(3)", "not null" => "1", "default" => "0"),
                                        "profile" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "allow_cid" => array("type" => "mediumtext", "not null" => "1"),
                                        "allow_gid" => array("type" => "mediumtext", "not null" => "1"),
@@ -880,10 +985,10 @@ function db_definition() {
                                        "guid" => array("guid"),
                                        )
                        );
-       $db["poll"] = array(
+       $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"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
                                        "q0" => array("type" => "mediumtext", "not null" => "1"),
                                        "q1" => array("type" => "mediumtext", "not null" => "1"),
                                        "q2" => array("type" => "mediumtext", "not null" => "1"),
@@ -900,11 +1005,11 @@ function db_definition() {
                                        "uid" => array("uid"),
                                        )
                        );
-       $db["poll_result"] = array(
+       $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"),
-                                       "choice" => array("type" => "int(11)", "not null" => "1"),
+                                       "poll_id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "choice" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
@@ -912,35 +1017,35 @@ function db_definition() {
                                        "choice" => array("choice"),
                                        )
                        );
-       $db["profile"] = array(
+       $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"),
-                                       "profile-name" => array("type" => "char(255)", "not null" => "1"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "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"),
-                                       "name" => array("type" => "char(255)", "not null" => "1"),
-                                       "pdesc" => array("type" => "char(255)", "not null" => "1"),
-                                       "dob" => array("type" => "char(32)", "not null" => "1", "default" => "0000-00-00"),
-                                       "address" => array("type" => "char(255)", "not null" => "1"),
-                                       "locality" => array("type" => "char(255)", "not null" => "1"),
-                                       "region" => array("type" => "char(255)", "not null" => "1"),
-                                       "postal-code" => array("type" => "char(32)", "not null" => "1"),
-                                       "country-name" => array("type" => "char(255)", "not null" => "1"),
-                                       "hometown" => array("type" => "char(255)", "not null" => "1"),
-                                       "gender" => array("type" => "char(32)", "not null" => "1"),
-                                       "marital" => array("type" => "char(255)", "not null" => "1"),
+                                       "name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "pdesc" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "dob" => array("type" => "varchar(32)", "not null" => "1", "default" => "0000-00-00"),
+                                       "address" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "locality" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "region" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "postal-code" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
+                                       "country-name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "hometown" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "gender" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
+                                       "marital" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "with" => array("type" => "text", "not null" => "1"),
                                        "howlong" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
-                                       "sexual" => array("type" => "char(255)", "not null" => "1"),
-                                       "politic" => array("type" => "char(255)", "not null" => "1"),
-                                       "religion" => array("type" => "char(255)", "not null" => "1"),
+                                       "sexual" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "politic" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "religion" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "pub_keywords" => array("type" => "text", "not null" => "1"),
                                        "prv_keywords" => array("type" => "text", "not null" => "1"),
                                        "likes" => array("type" => "text", "not null" => "1"),
                                        "dislikes" => array("type" => "text", "not null" => "1"),
                                        "about" => array("type" => "text", "not null" => "1"),
-                                       "summary" => array("type" => "char(255)", "not null" => "1"),
+                                       "summary" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "music" => array("type" => "text", "not null" => "1"),
                                        "book" => array("type" => "text", "not null" => "1"),
                                        "tv" => array("type" => "text", "not null" => "1"),
@@ -950,9 +1055,9 @@ function db_definition() {
                                        "work" => array("type" => "text", "not null" => "1"),
                                        "education" => array("type" => "text", "not null" => "1"),
                                        "contact" => array("type" => "text", "not null" => "1"),
-                                       "homepage" => array("type" => "char(255)", "not null" => "1"),
-                                       "photo" => array("type" => "char(255)", "not null" => "1"),
-                                       "thumb" => array("type" => "char(255)", "not null" => "1"),
+                                       "homepage" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "thumb" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "publish" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "net-publish" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        ),
@@ -961,41 +1066,41 @@ function db_definition() {
                                        "hometown" => array("hometown"),
                                        )
                        );
-       $db["profile_check"] = array(
+       $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"),
+                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
                                        "cid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
-                                       "dfrn_id" => array("type" => "char(255)", "not null" => "1"),
-                                       "sec" => array("type" => "char(255)", "not null" => "1"),
-                                       "expire" => array("type" => "int(11)", "not null" => "1"),
+                                       "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"),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
                                        )
                        );
-       $db["push_subscriber"] = array(
+       $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"),
-                                       "callback_url" => array("type" => "char(255)", "not null" => "1"),
-                                       "topic" => array("type" => "char(255)", "not null" => "1"),
-                                       "nickname" => array("type" => "char(255)", "not null" => "1"),
-                                       "push" => array("type" => "int(11)", "not null" => "1"),
-                                       "last_update" => array("type" => "datetime", "not null" => "1"),
-                                       "secret" => array("type" => "char(255)", "not null" => "1"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "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" => ""),
+                                       "push" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "last_update" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
+                                       "secret" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
                                        )
                        );
-       $db["queue"] = array(
+       $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"),
-                                       "network" => array("type" => "char(32)", "not null" => "1"),
-                                       "created" => array("type" => "datetime", "not null" => "1"),
-                                       "last" => array("type" => "datetime", "not null" => "1"),
+                                       "cid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "network" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
+                                       "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
+                                       "last" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
                                        "content" => array("type" => "mediumtext", "not null" => "1"),
                                        "batch" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        ),
@@ -1008,24 +1113,24 @@ function db_definition() {
                                        "batch" => array("batch"),
                                        )
                        );
-       $db["register"] = array(
+       $database["register"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "hash" => array("type" => "char(255)", "not null" => "1"),
-                                       "created" => array("type" => "datetime", "not null" => "1"),
-                                       "uid" => array("type" => "int(11) unsigned", "not null" => "1"),
-                                       "password" => array("type" => "char(255)", "not null" => "1"),
-                                       "language" => array("type" => "char(16)", "not null" => "1"),
+                                       "hash" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
+                                       "uid" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"),
+                                       "password" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "language" => array("type" => "varchar(16)", "not null" => "1", "default" => ""),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
                                        )
                        );
-       $db["search"] = array(
+       $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"),
-                                       "term" => array("type" => "char(255)", "not null" => "1"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "term" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
@@ -1033,12 +1138,12 @@ function db_definition() {
                                        "term" => array("term"),
                                        )
                        );
-       $db["session"] = array(
+       $database["session"] = array(
                        "fields" => array(
                                        "id" => array("type" => "bigint(20) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "sid" => array("type" => "char(255)", "not null" => "1"),
+                                       "sid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "data" => array("type" => "text", "not null" => "1"),
-                                       "expire" => array("type" => "int(10) unsigned", "not null" => "1"),
+                                       "expire" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
@@ -1046,14 +1151,14 @@ function db_definition() {
                                        "expire" => array("expire"),
                                        )
                        );
-       $db["sign"] = array(
+       $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"),
                                        "retract_iid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
                                        "signed_text" => array("type" => "mediumtext", "not null" => "1"),
                                        "signature" => array("type" => "text", "not null" => "1"),
-                                       "signer" => array("type" => "char(255)", "not null" => "1"),
+                                       "signer" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
@@ -1061,13 +1166,13 @@ function db_definition() {
                                        "retract_iid" => array("retract_iid"),
                                        )
                        );
-       $db["spam"] = array(
+       $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"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
                                        "spam" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
                                        "ham" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
-                                       "term" => array("type" => "char(255)", "not null" => "1"),
+                                       "term" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "date" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
                                        ),
                        "indexes" => array(
@@ -1078,14 +1183,18 @@ function db_definition() {
                                        "term" => array("term"),
                                        )
                        );
-       $db["term"] = array(
+       $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"),
-                                       "otype" => array("type" => "tinyint(3) unsigned", "not null" => "1"),
-                                       "type" => array("type" => "tinyint(3) unsigned", "not null" => "1"),
-                                       "term" => array("type" => "char(255)", "not null" => "1"),
-                                       "url" => array("type" => "char(255)", "not null" => "1"),
+                                       "oid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
+                                       "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" => ""),
+                                       "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"),
                                        ),
@@ -1094,11 +1203,12 @@ 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_created" => array("uid","otype","type","term","created"),
                                        "otype_type_term_tid" => array("otype","type","term","tid"),
+                                       "guid" => array("guid"),
                                        )
                        );
-       $db["thread"] = array(
+       $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"),
@@ -1115,13 +1225,14 @@ function db_definition() {
                                        "visible" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "spam" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "starred" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
+                                       "ignored" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "bookmark" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "unseen" => array("type" => "tinyint(1)", "not null" => "1", "default" => "1"),
                                        "deleted" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "origin" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "forum_mode" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "mention" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
-                                       "network" => array("type" => "char(32)", "not null" => "1"),
+                                       "network" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("iid"),
@@ -1136,48 +1247,50 @@ function db_definition() {
                                        "uid_commented" => array("uid","commented"),
                                        )
                        );
-       $db["tokens"] = array(
+       $database["tokens"] = array(
                        "fields" => array(
                                        "id" => array("type" => "varchar(40)", "not null" => "1", "primary" => "1"),
                                        "secret" => array("type" => "text", "not null" => "1"),
-                                       "client_id" => array("type" => "varchar(20)", "not null" => "1"),
-                                       "expires" => array("type" => "int(11)", "not null" => "1"),
-                                       "scope" => array("type" => "varchar(200)", "not null" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1"),
+                                       "client_id" => array("type" => "varchar(20)", "not null" => "1", "default" => ""),
+                                       "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"),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
                                        )
                        );
-       $db["unique_contacts"] = array(
+       $database["unique_contacts"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "url" => array("type" => "char(255)", "not null" => "1"),
-                                       "nick" => array("type" => "char(255)", "not null" => "1"),
-                                       "name" => array("type" => "char(255)", "not null" => "1"),
-                                       "avatar" => array("type" => "char(255)", "not null" => "1"),
+                                       "url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "nick" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "avatar" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "location" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "about" => array("type" => "text", "not null" => "1"),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
                                        "url" => array("url"),
                                        )
                        );
-       $db["user"] = array(
+       $database["user"] = array(
                        "fields" => array(
                                        "uid" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "guid" => array("type" => "char(64)", "not null" => "1"),
-                                       "username" => array("type" => "char(255)", "not null" => "1"),
-                                       "password" => array("type" => "char(255)", "not null" => "1"),
-                                       "nickname" => array("type" => "char(255)", "not null" => "1"),
-                                       "email" => array("type" => "char(255)", "not null" => "1"),
-                                       "openid" => array("type" => "char(255)", "not null" => "1"),
-                                       "timezone" => array("type" => "char(128)", "not null" => "1"),
-                                       "language" => array("type" => "char(32)", "not null" => "1", "default" => "en"),
+                                       "guid" => array("type" => "varchar(64)", "not null" => "1", "default" => ""),
+                                       "username" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "password" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "nickname" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "email" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "openid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+                                       "timezone" => array("type" => "varchar(128)", "not null" => "1", "default" => ""),
+                                       "language" => array("type" => "varchar(32)", "not null" => "1", "default" => "en"),
                                        "register_date" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
                                        "login_date" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
-                                       "default-location" => array("type" => "char(255)", "not null" => "1"),
+                                       "default-location" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "allow_location" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
-                                       "theme" => array("type" => "char(255)", "not null" => "1"),
+                                       "theme" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "pubkey" => array("type" => "text", "not null" => "1"),
                                        "prvkey" => array("type" => "text", "not null" => "1"),
                                        "spubkey" => array("type" => "text", "not null" => "1"),
@@ -1192,14 +1305,14 @@ function db_definition() {
                                        "notify-flags" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "65535"),
                                        "page-flags" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"),
                                        "prvnets" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
-                                       "pwdreset" => array("type" => "char(255)", "not null" => "1"),
+                                       "pwdreset" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "maxreq" => array("type" => "int(11)", "not null" => "1", "default" => "10"),
                                        "expire" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"),
                                        "account_removed" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "account_expired" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "account_expires_on" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
                                        "expire_notification_sent" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
-                                       "service_class" => array("type" => "char(32)", "not null" => "1"),
+                                       "service_class" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
                                        "def_gid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
                                        "allow_cid" => array("type" => "mediumtext", "not null" => "1"),
                                        "allow_gid" => array("type" => "mediumtext", "not null" => "1"),
@@ -1212,10 +1325,10 @@ function db_definition() {
                                        "nickname" => array("nickname"),
                                        )
                        );
-       $db["userd"] = array(
+       $database["userd"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "username" => array("type" => "char(255)", "not null" => "1"),
+                                       "username" => array("type" => "varchar(255)", "not null" => "1"),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
@@ -1223,5 +1336,31 @@ function db_definition() {
                                        )
                        );
 
-       return($db);
+       return($database);
+}
+
+
+/*
+ * run from command line
+ */
+function dbstructure_run(&$argv, &$argc) {
+       global $a, $db;
+
+       if(is_null($a)){
+               $a = new App;
+       }
+
+       if(is_null($db)) {
+               @include(".htconfig.php");
+               require_once("include/dba.php");
+               $db = new dba($db_host, $db_user, $db_pass, $db_data);
+                       unset($db_host, $db_user, $db_pass, $db_data);
+       }
+
+       update_structure(true, true);
+}
+
+if (array_search(__file__,get_included_files())===0){
+       dbstructure_run($_SERVER["argv"],$_SERVER["argc"]);
+       killme();
 }