<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://htyp.org/mw/index.php?action=history&amp;feed=atom&amp;title=User%3AWoozle%2FFriendica%2F2017_upgrade%2Fcontact</id>
	<title>User:Woozle/Friendica/2017 upgrade/contact - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://htyp.org/mw/index.php?action=history&amp;feed=atom&amp;title=User%3AWoozle%2FFriendica%2F2017_upgrade%2Fcontact"/>
	<link rel="alternate" type="text/html" href="https://htyp.org/mw/index.php?title=User:Woozle/Friendica/2017_upgrade/contact&amp;action=history"/>
	<updated>2026-06-26T02:14:23Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://htyp.org/mw/index.php?title=User:Woozle/Friendica/2017_upgrade/contact&amp;diff=22477&amp;oldid=prev</id>
		<title>Woozle: extracted from parent page</title>
		<link rel="alternate" type="text/html" href="https://htyp.org/mw/index.php?title=User:Woozle/Friendica/2017_upgrade/contact&amp;diff=22477&amp;oldid=prev"/>
		<updated>2017-04-08T14:32:40Z</updated>

		<summary type="html">&lt;p&gt;extracted from parent page&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;It proved impossible to simply alter the `contacts` table in place because of invalid DATETIME VALUES. Instead I had to rename the old table, create the new one (modified from the official spec), then copy the old data into the new table.&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
| valign=top |&lt;br /&gt;
==create table==&lt;br /&gt;
&amp;lt;mysql&amp;gt;CREATE TABLE IF NOT EXISTS `contact` (&lt;br /&gt;
	`id` int(11) NOT NULL auto_increment,&lt;br /&gt;
	`uid` int(11) NOT NULL DEFAULT 0,&lt;br /&gt;
	`created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,&lt;br /&gt;
	`self` tinyint(1) NOT NULL DEFAULT 0,&lt;br /&gt;
	`remote_self` tinyint(1) NOT NULL DEFAULT 0,&lt;br /&gt;
	`rel` tinyint(1) NOT NULL DEFAULT 0,&lt;br /&gt;
	`duplex` tinyint(1) NOT NULL DEFAULT 0,&lt;br /&gt;
	`network` varchar(255) NOT NULL DEFAULT &amp;#039;&amp;#039;,&lt;br /&gt;
	`name` varchar(255) NOT NULL DEFAULT &amp;#039;&amp;#039;,&lt;br /&gt;
	`nick` varchar(255) NOT NULL DEFAULT &amp;#039;&amp;#039;,&lt;br /&gt;
	`location` varchar(255) NOT NULL DEFAULT &amp;#039;&amp;#039;,&lt;br /&gt;
	`about` text,&lt;br /&gt;
	`keywords` text,&lt;br /&gt;
	`gender` varchar(32) NOT NULL DEFAULT &amp;#039;&amp;#039;,&lt;br /&gt;
	`xmpp` varchar(255) NOT NULL DEFAULT &amp;#039;&amp;#039;,&lt;br /&gt;
	`attag` varchar(255) NOT NULL DEFAULT &amp;#039;&amp;#039;,&lt;br /&gt;
	`avatar` varchar(255) NOT NULL DEFAULT &amp;#039;&amp;#039;,&lt;br /&gt;
	`photo` text,&lt;br /&gt;
	`thumb` text,&lt;br /&gt;
	`micro` text,&lt;br /&gt;
	`site-pubkey` text,&lt;br /&gt;
	`issued-id` varchar(255) NOT NULL DEFAULT &amp;#039;&amp;#039;,&lt;br /&gt;
	`dfrn-id` varchar(255) NOT NULL DEFAULT &amp;#039;&amp;#039;,&lt;br /&gt;
	`url` varchar(255) NOT NULL DEFAULT &amp;#039;&amp;#039;,&lt;br /&gt;
	`nurl` varchar(255) NOT NULL DEFAULT &amp;#039;&amp;#039;,&lt;br /&gt;
	`addr` varchar(255) NOT NULL DEFAULT &amp;#039;&amp;#039;,&lt;br /&gt;
	`alias` varchar(255) NOT NULL DEFAULT &amp;#039;&amp;#039;,&lt;br /&gt;
	`pubkey` text,&lt;br /&gt;
	`prvkey` text,&lt;br /&gt;
	`batch` varchar(255) NOT NULL DEFAULT &amp;#039;&amp;#039;,&lt;br /&gt;
	`request` text,&lt;br /&gt;
	`notify` text,&lt;br /&gt;
	`poll` text,&lt;br /&gt;
	`confirm` text,&lt;br /&gt;
	`poco` text,&lt;br /&gt;
	`aes_allow` tinyint(1) NOT NULL DEFAULT 0,&lt;br /&gt;
	`ret-aes` tinyint(1) NOT NULL DEFAULT 0,&lt;br /&gt;
	`usehub` tinyint(1) NOT NULL DEFAULT 0,&lt;br /&gt;
	`subhub` tinyint(1) NOT NULL DEFAULT 0,&lt;br /&gt;
	`hub-verify` varchar(255) NOT NULL DEFAULT &amp;#039;&amp;#039;,&lt;br /&gt;
	`last-update` datetime DEFAULT NULL,&lt;br /&gt;
	`success_update` datetime DEFAULT NULL,&lt;br /&gt;
	`failure_update` datetime DEFAULT NULL,&lt;br /&gt;
	`name-date` datetime DEFAULT NULL,&lt;br /&gt;
	`uri-date` datetime DEFAULT NULL,&lt;br /&gt;
	`avatar-date` datetime DEFAULT NULL,&lt;br /&gt;
	`term-date` datetime DEFAULT NULL,&lt;br /&gt;
	`last-item` datetime DEFAULT NULL,&lt;br /&gt;
	`priority` tinyint(3) NOT NULL DEFAULT 0,&lt;br /&gt;
	`blocked` tinyint(1) NOT NULL DEFAULT 1,&lt;br /&gt;
	`readonly` tinyint(1) NOT NULL DEFAULT 0,&lt;br /&gt;
	`writable` tinyint(1) NOT NULL DEFAULT 0,&lt;br /&gt;
	`forum` tinyint(1) NOT NULL DEFAULT 0,&lt;br /&gt;
	`prv` tinyint(1) NOT NULL DEFAULT 0,&lt;br /&gt;
	`contact-type` int(11) unsigned NOT NULL DEFAULT 0,&lt;br /&gt;
	`hidden` tinyint(1) NOT NULL DEFAULT 0,&lt;br /&gt;
	`archive` tinyint(1) NOT NULL DEFAULT 0,&lt;br /&gt;
	`pending` tinyint(1) NOT NULL DEFAULT 1,&lt;br /&gt;
	`rating` tinyint(1) NOT NULL DEFAULT 0,&lt;br /&gt;
	`reason` text,&lt;br /&gt;
	`closeness` tinyint(2) NOT NULL DEFAULT 99,&lt;br /&gt;
	`info` mediumtext,&lt;br /&gt;
	`profile-id` int(11) NOT NULL DEFAULT 0,&lt;br /&gt;
	`bdyear` varchar(4) NOT NULL DEFAULT &amp;#039;&amp;#039;,&lt;br /&gt;
	`bd` date DEFAULT NULL,&lt;br /&gt;
	`notify_new_posts` tinyint(1) NOT NULL DEFAULT 0,&lt;br /&gt;
	`fetch_further_information` tinyint(1) NOT NULL DEFAULT 0,&lt;br /&gt;
	`ffi_keyword_blacklist` text,&lt;br /&gt;
	 PRIMARY KEY(`id`),&lt;br /&gt;
	 INDEX `uid_name` (`uid`,`name`),&lt;br /&gt;
	 INDEX `self_uid` (`self`,`uid`),&lt;br /&gt;
	 INDEX `alias_uid` (`alias`(32),`uid`),&lt;br /&gt;
	 INDEX `pending_uid` (`pending`,`uid`),&lt;br /&gt;
	 INDEX `blocked_uid` (`blocked`,`uid`),&lt;br /&gt;
	 INDEX `uid_rel_network_poll` (`uid`,`rel`,`network`,`poll`(64),`archive`),&lt;br /&gt;
	 INDEX `uid_network_batch` (`uid`,`network`,`batch`(64)),&lt;br /&gt;
	 INDEX `addr_uid` (`addr`(32),`uid`),&lt;br /&gt;
	 INDEX `nurl_uid` (`nurl`(32),`uid`),&lt;br /&gt;
	 INDEX `nick_uid` (`nick`(32),`uid`),&lt;br /&gt;
	 INDEX `dfrn-id` (`dfrn-id`),&lt;br /&gt;
	 INDEX `issued-id` (`issued-id`)&lt;br /&gt;
) DEFAULT CHARSET=utf8mb4;&amp;lt;/mysql&amp;gt;&lt;br /&gt;
All but one of the DATETIME fields are now DEFAULT NULL. I decided `create` should be DEFAULT CURRENT_TIMESTAMP, because how far wrong can you go with that in a creation-timestamp field? I guess we&amp;#039;ll find out...&lt;br /&gt;
|&lt;br /&gt;
==copy data==&lt;br /&gt;
&amp;lt;mysql&amp;gt;INSERT INTO `contact`(&lt;br /&gt;
    `id`,&lt;br /&gt;
    `uid`,&lt;br /&gt;
    `created`,&lt;br /&gt;
    `self`,&lt;br /&gt;
    `remote_self`,&lt;br /&gt;
    `rel`,&lt;br /&gt;
    `duplex`,&lt;br /&gt;
    `network`,&lt;br /&gt;
    `name`,&lt;br /&gt;
    `nick`,&lt;br /&gt;
    `attag`,&lt;br /&gt;
    `photo`,&lt;br /&gt;
    `thumb`,&lt;br /&gt;
    `micro`,&lt;br /&gt;
    `site-pubkey`,&lt;br /&gt;
    `issued-id`,&lt;br /&gt;
    `dfrn-id`,&lt;br /&gt;
    `url`,&lt;br /&gt;
    `nurl`,&lt;br /&gt;
    `addr`,&lt;br /&gt;
    `alias`,&lt;br /&gt;
    `pubkey`,&lt;br /&gt;
    `prvkey`,&lt;br /&gt;
    `batch`,&lt;br /&gt;
    `request`,&lt;br /&gt;
    `notify`,&lt;br /&gt;
    `poll`,&lt;br /&gt;
    `confirm`,&lt;br /&gt;
    `poco`,&lt;br /&gt;
    `aes_allow`,&lt;br /&gt;
    `ret-aes`,&lt;br /&gt;
    `usehub`,&lt;br /&gt;
    `subhub`,&lt;br /&gt;
    `hub-verify`,&lt;br /&gt;
    `last-update`,&lt;br /&gt;
    `success_update`,&lt;br /&gt;
    `name-date`,&lt;br /&gt;
    `uri-date`,&lt;br /&gt;
    `avatar-date`,&lt;br /&gt;
    `term-date`,&lt;br /&gt;
    `priority`,&lt;br /&gt;
    `blocked`,&lt;br /&gt;
    `readonly`,&lt;br /&gt;
    `writable`,&lt;br /&gt;
    `forum`,&lt;br /&gt;
    `prv`,&lt;br /&gt;
    `hidden`,&lt;br /&gt;
    `archive`,&lt;br /&gt;
    `pending`,&lt;br /&gt;
    `rating`,&lt;br /&gt;
    `reason`,&lt;br /&gt;
    `closeness`,&lt;br /&gt;
    `info`,&lt;br /&gt;
    `profile-id`,&lt;br /&gt;
    `bdyear`,&lt;br /&gt;
    `bd`,&lt;br /&gt;
    `notify_new_posts`,&lt;br /&gt;
    `fetch_further_information`,&lt;br /&gt;
    `ffi_keyword_blacklist`&lt;br /&gt;
    )&lt;br /&gt;
SELECT&lt;br /&gt;
	`id`,&lt;br /&gt;
    `uid`,&lt;br /&gt;
    `created`,&lt;br /&gt;
    `self`,&lt;br /&gt;
    `remote_self`,&lt;br /&gt;
    `rel`,&lt;br /&gt;
    `duplex`,&lt;br /&gt;
    `network`,&lt;br /&gt;
    `name`,&lt;br /&gt;
    `nick`,&lt;br /&gt;
    `attag`,&lt;br /&gt;
    `photo`,&lt;br /&gt;
    `thumb`,&lt;br /&gt;
    `micro`,&lt;br /&gt;
    `site-pubkey`,&lt;br /&gt;
    `issued-id`,&lt;br /&gt;
    `dfrn-id`,&lt;br /&gt;
    `url`,&lt;br /&gt;
    `nurl`,&lt;br /&gt;
    `addr`,&lt;br /&gt;
    `alias`,&lt;br /&gt;
    `pubkey`,&lt;br /&gt;
    `prvkey`,&lt;br /&gt;
    `batch`,&lt;br /&gt;
    `request`,&lt;br /&gt;
    `notify`,&lt;br /&gt;
    `poll`,&lt;br /&gt;
    `confirm`,&lt;br /&gt;
    `poco`,&lt;br /&gt;
    `aes_allow`,&lt;br /&gt;
    `ret-aes`,&lt;br /&gt;
    `usehub`,&lt;br /&gt;
    `subhub`,&lt;br /&gt;
    `hub-verify`,&lt;br /&gt;
    IF(UNIX_TIMESTAMP(`last-update`)=0,NULL,`last-update`),&lt;br /&gt;
    IF(UNIX_TIMESTAMP(`success_update`)=0,NULL,`success_update`),&lt;br /&gt;
    IF(UNIX_TIMESTAMP(`name-date`)=0,NULL,`name-date`),&lt;br /&gt;
    IF(UNIX_TIMESTAMP(`uri-date`)=0,NULL,`uri-date`),&lt;br /&gt;
    IF(UNIX_TIMESTAMP(`avatar-date`)=0,NULL,`avatar-date`),&lt;br /&gt;
    IF(UNIX_TIMESTAMP(`term-date`)=0,NULL,`term-date`),&lt;br /&gt;
    `priority`,&lt;br /&gt;
    `blocked`,&lt;br /&gt;
    `readonly`,&lt;br /&gt;
    `writable`,&lt;br /&gt;
    `forum`,&lt;br /&gt;
    `prv`,&lt;br /&gt;
    `hidden`,&lt;br /&gt;
    `archive`,&lt;br /&gt;
    `pending`,&lt;br /&gt;
    `rating`,&lt;br /&gt;
    `reason`,&lt;br /&gt;
    `closeness`,&lt;br /&gt;
    `info`,&lt;br /&gt;
    `profile-id`,&lt;br /&gt;
    `bdyear`,&lt;br /&gt;
    IF(UNIX_TIMESTAMP(`bd`)=0,NULL,`bd`),&lt;br /&gt;
    `notify_new_posts`,&lt;br /&gt;
    `fetch_further_information`,&lt;br /&gt;
    `ffi_keyword_blacklist`&lt;br /&gt;
FROM `icms-fka`.`contact-original`;&amp;lt;/mysql&amp;gt;&lt;br /&gt;
The &amp;quot;UNIX_TIMESTAMP()&amp;quot; function was necessary because I would get errors even when comparing the field to &amp;#039;0000-00-00 00:00:00&amp;#039;. If there were any illegal values other than that, I couldn&amp;#039;t find them even by doing a SELECT which explicitly filtered for them (SELECT UNIX_TIMESTAMP(`last-update`), `last-update` FROM `contact-original` WHERE UNIX_TIMESTAMP(`last-update`)=0 AND `last-update` != &amp;#039;0000-00-00 00:00:00&amp;#039;).&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Woozle</name></author>
	</entry>
</feed>