]> git.mxchange.org Git - friendica.git/blobdiff - include/dbstructure.php
Merge branch 'release/3.4' into develop
[friendica.git] / include / dbstructure.php
index 5560c84b60c747514e850e05b6bb02358a7f43b6..f131abe64f13b489621c85114536ce3b3f6524cd 100644 (file)
@@ -1,28 +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,
+               ));
        }
 
-       update_structure(true, true);
-}
 
-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);
 
@@ -49,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"] != "")
@@ -59,34 +102,21 @@ function table_structure($table) {
                                $fielddata[$field["Field"]]["primary"] = true;
                }
        }
-
        return(array("fields"=>$fielddata, "indexes"=>$indexdata));
 }
 
 function print_structure($database) {
+       echo "-- ------------------------------------------\n";
+       echo "-- ".FRIENDICA_PLATFORM." ".FRIENDICA_VERSION." (".FRIENDICA_CODENAME,")\n";
+       echo "-- DB_UPDATE_VERSION ".DB_UPDATE_VERSION."\n";
+       echo "-- ------------------------------------------\n\n\n";
        foreach ($database AS $name => $structure) {
-               echo "\t".'$database["'.$name."\"] = array(\n";
-
-               echo "\t\t\t".'"fields" => array('."\n";
-               foreach ($structure["fields"] AS $fieldname => $parameters) {
-                       echo "\t\t\t\t\t".'"'.$fieldname.'" => array(';
+               echo "--\n";
+               echo "-- TABLE $name\n";
+               echo "--\n";
+               db_create_table($name, $structure['fields'], true, false, $structure["indexes"]);
 
-                       $data = "";
-                       foreach ($parameters AS $name => $value) {
-                               if ($data != "")
-                                       $data .= ", ";
-                               $data .= '"'.$name.'" => "'.$value.'"';
-                       }
-
-                       echo $data."),\n";
-               }
-               echo "\t\t\t\t\t),\n";
-               echo "\t\t\t".'"indexes" => array('."\n";
-               foreach ($structure["indexes"] AS $indexname => $fieldnames) {
-                       echo "\t\t\t\t\t".'"'.$indexname.'" => array("'.implode($fieldnames, '","').'"'."),\n";
-               }
-               echo "\t\t\t\t\t)\n";
-               echo "\t\t\t);\n";
+               echo "\n";
        }
 }
 
@@ -95,6 +125,8 @@ function update_structure($verbose, $action) {
 
        $errors = false;
 
+       logger('updating structure', LOGGER_DEBUG);
+
        // Get the current structure
        $database = array();
 
@@ -130,15 +162,15 @@ function update_structure($verbose, $action) {
                        // Compare the field structure field by field
                        foreach ($structure["fields"] AS $fieldname => $parameters) {
                                if (!isset($database[$name]["fields"][$fieldname])) {
-                                       $sql2=db_add_table_field($name, $fieldname, $parameters);
+                                       $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($database[$name]["fields"][$fieldname]);
-                                       $new_field_definition = implode($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 == "")
@@ -173,7 +205,7 @@ function update_structure($verbose, $action) {
                        if ($action) {
                                $r = @$db->q($sql3);
                                if(false === $r)
-                                       $errors .=  t('Errors encountered performing database changes.').$sql3.EOL;
+                                       $errors .= t('Errors encountered performing database changes.').$sql3.EOL;
                        }
                }
        }
@@ -187,9 +219,13 @@ function db_field_command($parameters, $create = true) {
        if ($parameters["not null"])
                $fieldstruct .= " NOT NULL";
 
-       if ($parameters["default"] != "")
-               $fieldstruct .= " DEFAULT '".$parameters["default"]."'";
-
+       if (isset($parameters["default"])){
+               if (strpos(strtolower($parameters["type"]),"int")!==false) {
+                       $fieldstruct .= " DEFAULT ".$parameters["default"];
+               } else {
+                       $fieldstruct .= " DEFAULT '".$parameters["default"]."'";
+               }
+       }
        if ($parameters["extra"] != "")
                $fieldstruct .= " ".$parameters["extra"];
 
@@ -199,20 +235,28 @@ function db_field_command($parameters, $create = true) {
        return($fieldstruct);
 }
 
-function db_create_table($name, $fields, $verbose, $action) {
+function db_create_table($name, $fields, $verbose, $action, $indexes=null) {
        global $a, $db;
 
        $r = true;
 
        $sql = "";
+       $sql_rows = array();
        foreach($fields AS $fieldname => $field) {
-               if ($sql != "")
-                       $sql .= ",\n";
+               $sql_rows[] = "`".dbesc($fieldname)."` ".db_field_command($field);
+       }
 
-               $sql .= "`".dbesc($fieldname)."` ".db_field_command($field);
+       if (!is_null($indexes)) {
+
+               foreach ($indexes AS $indexname => $fieldnames) {
+                       $sql_index = db_create_index($indexname, $fieldnames, "");
+                       if (!is_null($sql_index)) $sql_rows[] = $sql_index;
+               }
        }
 
-       $sql = sprintf("CREATE TABLE IF NOT EXISTS `%s` (\n", dbesc($name)).$sql."\n) DEFAULT CHARSET=utf8";
+       $sql = implode(",\n\t", $sql_rows);
+
+       $sql = sprintf("CREATE TABLE IF NOT EXISTS `%s` (\n\t", dbesc($name)).$sql."\n) DEFAULT CHARSET=utf8";
 
        if ($verbose)
                echo $sql.";\n";
@@ -238,7 +282,7 @@ function db_drop_index($indexname) {
        return($sql);
 }
 
-function db_create_index($indexname, $fieldnames) {
+function db_create_index($indexname, $fieldnames, $method="ADD") {
 
        if ($indexname == "PRIMARY")
                return;
@@ -254,7 +298,13 @@ function db_create_index($indexname, $fieldnames) {
                        $names .= "`".dbesc($fieldname)."`";
        }
 
-       $sql = sprintf("ADD INDEX `%s` (%s)", dbesc($indexname), $names);
+       $method = strtoupper(trim($method));
+       if ($method!="" && $method!="ADD") {
+               throw new Exception("Invalid parameter 'method' in db_create_index(): '$method'");
+               killme();
+       }
+
+       $sql = sprintf("%s INDEX `%s` (%s)", $method, dbesc($indexname), $names);
        return($sql);
 }
 
@@ -265,8 +315,8 @@ function db_definition() {
        $database["addon"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "name" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "version" => array("type" => "varchar(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"),
@@ -279,11 +329,11 @@ function db_definition() {
        $database["attach"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1"),
-                                       "hash" => array("type" => "varchar(64)", "not null" => "1"),
-                                       "filename" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "filetype" => array("type" => "varchar(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"),
@@ -299,10 +349,10 @@ function db_definition() {
        $database["auth_codes"] = array(
                        "fields" => array(
                                        "id" => array("type" => "varchar(40)", "not null" => "1", "primary" => "1"),
-                                       "client_id" => array("type" => "varchar(20)", "not null" => "1"),
-                                       "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"),
@@ -312,7 +362,7 @@ function db_definition() {
                        "fields" => array(
                                        "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"),
@@ -322,11 +372,11 @@ function db_definition() {
        $database["challenge"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "challenge" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "dfrn-id" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "expire" => array("type" => "int(11)", "not null" => "1"),
-                                       "type" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "last_update" => array("type" => "varchar(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"),
@@ -335,8 +385,8 @@ function db_definition() {
        $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"),
@@ -348,8 +398,8 @@ function db_definition() {
        $database["config"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "cat" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "k" => array("type" => "varchar(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(
@@ -360,29 +410,33 @@ function db_definition() {
        $database["contact"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1"),
+                                       "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" => "varchar(255)", "not null" => "1"),
-                                       "name" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "nick" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "attag" => array("type" => "varchar(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" => "varchar(255)", "not null" => "1"),
-                                       "dfrn-id" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "url" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "nurl" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "addr" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "alias" => array("type" => "varchar(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" => "varchar(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"),
@@ -392,14 +446,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" => "varchar(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"),
@@ -413,10 +467,11 @@ 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" => "varchar(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"),
@@ -426,10 +481,10 @@ function db_definition() {
        $database["conv"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "guid" => array("type" => "varchar(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" => "varchar(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"),
@@ -442,9 +497,9 @@ function db_definition() {
        $database["deliverq"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "cmd" => array("type" => "varchar(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"),
@@ -453,9 +508,9 @@ function db_definition() {
        $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"),
@@ -464,17 +519,17 @@ function db_definition() {
        $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" => "varchar(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" => "varchar(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"),
@@ -491,19 +546,19 @@ function db_definition() {
        $database["fcontact"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "url" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "name" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "photo" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "request" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "nick" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "addr" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "batch" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "notify" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "poll" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "confirm" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "priority" => array("type" => "tinyint(1)", "not null" => "1"),
-                                       "network" => array("type" => "varchar(32)", "not null" => "1"),
-                                       "alias" => array("type" => "varchar(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"),
                                        ),
@@ -515,9 +570,9 @@ function db_definition() {
        $database["ffinder"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1"),
-                                       "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"),
@@ -526,8 +581,8 @@ function db_definition() {
        $database["fserver"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "server" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "posturl" => array("type" => "varchar(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(
@@ -538,14 +593,14 @@ function db_definition() {
        $database["fsuggest"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1"),
-                                       "cid" => array("type" => "int(11)", "not null" => "1"),
-                                       "name" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "url" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "request" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "photo" => array("type" => "varchar(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"),
@@ -554,8 +609,8 @@ function db_definition() {
        $database["gcign"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1"),
-                                       "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"),
@@ -566,11 +621,18 @@ function db_definition() {
        $database["gcontact"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "name" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "url" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "nurl" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "photo" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "connect" => array("type" => "varchar(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"),
@@ -580,11 +642,11 @@ function db_definition() {
        $database["glink"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "cid" => array("type" => "int(11)", "not null" => "1"),
-                                       "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"),
@@ -596,10 +658,10 @@ function db_definition() {
        $database["group"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1"),
+                                       "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" => "varchar(255)", "not null" => "1"),
+                                       "name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
@@ -609,9 +671,9 @@ function db_definition() {
        $database["group_member"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1"),
-                                       "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"),
@@ -621,7 +683,7 @@ function db_definition() {
        $database["guid"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "guid" => array("type" => "varchar(255)", "not null" => "1"),
+                                       "guid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
@@ -631,9 +693,9 @@ function db_definition() {
        $database["hook"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "hook" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "file" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "function" => array("type" => "varchar(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(
@@ -644,14 +706,14 @@ function db_definition() {
        $database["intro"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1"),
+                                       "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" => "varchar(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"),
                                        ),
@@ -662,46 +724,46 @@ function db_definition() {
        $database["item"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "guid" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "uri" => array("type" => "varchar(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" => "varchar(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" => "varchar(255)", "not null" => "1"),
-                                       "extid" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "thr-parent" => array("type" => "varchar(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" => "varchar(255)", "not null" => "1"),
-                                       "owner-link" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "owner-avatar" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "author-name" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "author-link" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "author-avatar" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "title" => array("type" => "varchar(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" => "varchar(255)", "not null" => "1"),
-                                       "verb" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "object-type" => array("type" => "varchar(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" => "varchar(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" => "varchar(255)", "not null" => "1"),
-                                       "resource-id" => array("type" => "varchar(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" => "varchar(255)", "not null" => "1"),
-                                       "coord" => array("type" => "varchar(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"),
@@ -719,7 +781,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" => "varchar(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"),
@@ -760,10 +825,10 @@ function db_definition() {
        $database["item_id"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "iid" => array("type" => "int(11)", "not null" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1"),
-                                       "sid" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "service" => array("type" => "varchar(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"),
@@ -776,8 +841,9 @@ function db_definition() {
        $database["locks"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "name" => array("type" => "varchar(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"),
@@ -786,21 +852,21 @@ function db_definition() {
        $database["mail"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1"),
-                                       "guid" => array("type" => "varchar(64)", "not null" => "1"),
-                                       "from-name" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "from-photo" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "from-url" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "contact-id" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "convid" => array("type" => "int(11) unsigned", "not null" => "1"),
-                                       "title" => array("type" => "varchar(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" => "varchar(255)", "not null" => "1"),
-                                       "parent-uri" => array("type" => "varchar(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(
@@ -816,16 +882,16 @@ function db_definition() {
        $database["mailacct"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1"),
-                                       "server" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "port" => array("type" => "int(11)", "not null" => "1"),
-                                       "ssltype" => array("type" => "varchar(16)", "not null" => "1"),
-                                       "mailbox" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "user" => array("type" => "varchar(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" => "varchar(255)", "not null" => "1"),
-                                       "action" => array("type" => "int(11)", "not null" => "1"),
-                                       "movetofolder" => array("type" => "varchar(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"),
                                        ),
@@ -836,8 +902,8 @@ function db_definition() {
        $database["manage"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1"),
-                                       "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"),
@@ -847,19 +913,19 @@ function db_definition() {
        $database["notify"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "hash" => array("type" => "varchar(64)", "not null" => "1"),
-                                       "type" => array("type" => "int(11)", "not null" => "1"),
-                                       "name" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "url" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "photo" => array("type" => "varchar(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" => "varchar(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" => "varchar(255)", "not null" => "1"),
-                                       "otype" => array("type" => "varchar(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"),
@@ -869,10 +935,10 @@ function db_definition() {
        $database["notify-threads"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "notify-id" => array("type" => "int(11)", "not null" => "1"),
+                                       "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"),
@@ -884,8 +950,8 @@ function db_definition() {
                        "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" => "varchar(255)", "not null" => "1"),
-                                       "k" => array("type" => "varchar(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(
@@ -896,22 +962,22 @@ function db_definition() {
        $database["photo"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1"),
+                                       "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" => "varchar(64)", "not null" => "1"),
-                                       "resource-id" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "created" => array("type" => "datetime", "not null" => "1"),
-                                       "edited" => array("type" => "datetime", "not null" => "1"),
-                                       "title" => array("type" => "varchar(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" => "varchar(255)", "not null" => "1"),
-                                       "filename" => array("type" => "varchar(255)", "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"),
-                                       "width" => array("type" => "smallint(6)", "not null" => "1"),
+                                       "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"),
@@ -928,7 +994,7 @@ function db_definition() {
        $database["poll"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1"),
+                                       "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"),
@@ -948,8 +1014,8 @@ function db_definition() {
        $database["poll_result"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "poll_id" => array("type" => "int(11)", "not null" => "1"),
-                                       "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"),
@@ -960,32 +1026,32 @@ function db_definition() {
        $database["profile"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1"),
-                                       "profile-name" => array("type" => "varchar(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" => "varchar(255)", "not null" => "1"),
-                                       "pdesc" => array("type" => "varchar(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"),
-                                       "locality" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "region" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "postal-code" => array("type" => "varchar(32)", "not null" => "1"),
-                                       "country-name" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "hometown" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "gender" => array("type" => "varchar(32)", "not null" => "1"),
-                                       "marital" => array("type" => "varchar(255)", "not null" => "1"),
+                                       "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" => "varchar(255)", "not null" => "1"),
-                                       "politic" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "religion" => array("type" => "varchar(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" => "varchar(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"),
@@ -995,9 +1061,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" => "varchar(255)", "not null" => "1"),
-                                       "photo" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "thumb" => array("type" => "varchar(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"),
                                        ),
@@ -1009,11 +1075,11 @@ function db_definition() {
        $database["profile_check"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1"),
+                                       "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" => "varchar(255)", "not null" => "1"),
-                                       "sec" => array("type" => "varchar(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"),
@@ -1022,13 +1088,13 @@ function db_definition() {
        $database["push_subscriber"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1"),
-                                       "callback_url" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "topic" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "nickname" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "push" => array("type" => "int(11)", "not null" => "1"),
-                                       "last_update" => array("type" => "datetime", "not null" => "1"),
-                                       "secret" => array("type" => "varchar(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"),
@@ -1037,10 +1103,10 @@ function db_definition() {
        $database["queue"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "cid" => array("type" => "int(11)", "not null" => "1"),
-                                       "network" => array("type" => "varchar(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"),
                                        ),
@@ -1056,11 +1122,11 @@ function db_definition() {
        $database["register"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "hash" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "created" => array("type" => "datetime", "not null" => "1"),
-                                       "uid" => array("type" => "int(11) unsigned", "not null" => "1"),
-                                       "password" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "language" => array("type" => "varchar(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"),
@@ -1069,8 +1135,8 @@ function db_definition() {
        $database["search"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1"),
-                                       "term" => array("type" => "varchar(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"),
@@ -1081,9 +1147,9 @@ function db_definition() {
        $database["session"] = array(
                        "fields" => array(
                                        "id" => array("type" => "bigint(20) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "sid" => array("type" => "varchar(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"),
@@ -1098,7 +1164,7 @@ function db_definition() {
                                        "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" => "varchar(255)", "not null" => "1"),
+                                       "signer" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
@@ -1109,10 +1175,10 @@ function db_definition() {
        $database["spam"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1"),
+                                       "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" => "varchar(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(
@@ -1126,11 +1192,15 @@ function db_definition() {
        $database["term"] = array(
                        "fields" => array(
                                        "tid" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "oid" => array("type" => "int(10) unsigned", "not null" => "1"),
-                                       "otype" => array("type" => "tinyint(3) unsigned", "not null" => "1"),
-                                       "type" => array("type" => "tinyint(3) unsigned", "not null" => "1"),
-                                       "term" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "url" => array("type" => "varchar(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"),
                                        ),
@@ -1139,8 +1209,9 @@ function db_definition() {
                                        "oid_otype_type_term" => array("oid","otype","type","term"),
                                        "uid_term_tid" => array("uid","term","tid"),
                                        "type_term" => array("type","term"),
-                                       "uid_otype_type_term_tid" => array("uid","otype","type","term","tid"),
+                                       "uid_otype_type_term_global_created" => array("uid","otype","type","term","global","created"),
                                        "otype_type_term_tid" => array("otype","type","term","tid"),
+                                       "guid" => array("guid"),
                                        )
                        );
        $database["thread"] = array(
@@ -1160,13 +1231,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" => "varchar(32)", "not null" => "1"),
+                                       "network" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("iid"),
@@ -1185,10 +1257,10 @@ function db_definition() {
                        "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"),
@@ -1197,10 +1269,12 @@ function db_definition() {
        $database["unique_contacts"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "url" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "nick" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "name" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "avatar" => array("type" => "varchar(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"),
@@ -1210,19 +1284,19 @@ function db_definition() {
        $database["user"] = array(
                        "fields" => array(
                                        "uid" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "guid" => array("type" => "varchar(64)", "not null" => "1"),
-                                       "username" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "password" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "nickname" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "email" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "openid" => array("type" => "varchar(255)", "not null" => "1"),
-                                       "timezone" => array("type" => "varchar(128)", "not null" => "1"),
+                                       "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" => "varchar(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" => "varchar(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"),
@@ -1237,14 +1311,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" => "varchar(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" => "varchar(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"),
@@ -1270,3 +1344,51 @@ function db_definition() {
 
        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);
+       }
+
+       if ($argc==2) {
+               switch ($argv[1]) {
+                       case "update":
+                               update_structure(true, true);
+                               return;
+                       case "dumpsql":
+                               print_structure(db_definition());
+                               return;
+               }
+       }
+
+
+       // print help
+       echo $argv[0]." <command>\n";
+       echo "\n";
+       echo "commands:\n";
+       echo "update            update database schema\n";
+       echo "dumpsql           dump database schema\n";
+       return;
+
+
+
+
+}
+
+if (array_search(__file__,get_included_files())===0){
+       dbstructure_run($_SERVER["argv"],$_SERVER["argc"]);
+       killme();
+}