|
|
| Line 1: |
Line 1: |
| This isn't a complete description of everything I had to do in order to get the latest [[Friendica]] working with my existing data, but it shows how I solved some of the more thorny problems. | | This isn't a complete description of everything I had to do in order to get the latest [[Friendica]] working with my existing data, but it shows how I solved some of the more thorny problems. |
|
| |
|
| ==modify Contacts== | | ==Table Modifications== |
| 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.
| | * [[/contact]] - this is the first one I did, so notes are more explanatory |
| {|
| | * [[/item]] |
| |
| |
| | valign=top |
| |
| ===create table===
| |
| <mysql>CREATE TABLE IF NOT EXISTS `contact` (
| |
| `id` int(11) NOT NULL auto_increment,
| |
| `uid` int(11) NOT NULL DEFAULT 0,
| |
| `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
| |
| `self` tinyint(1) NOT NULL DEFAULT 0,
| |
| `remote_self` tinyint(1) NOT NULL DEFAULT 0,
| |
| `rel` tinyint(1) NOT NULL DEFAULT 0,
| |
| `duplex` tinyint(1) NOT NULL DEFAULT 0,
| |
| `network` varchar(255) NOT NULL DEFAULT '',
| |
| `name` varchar(255) NOT NULL DEFAULT '',
| |
| `nick` varchar(255) NOT NULL DEFAULT '',
| |
| `location` varchar(255) NOT NULL DEFAULT '',
| |
| `about` text,
| |
| `keywords` text,
| |
| `gender` varchar(32) NOT NULL DEFAULT '',
| |
| `xmpp` varchar(255) NOT NULL DEFAULT '',
| |
| `attag` varchar(255) NOT NULL DEFAULT '',
| |
| `avatar` varchar(255) NOT NULL DEFAULT '',
| |
| `photo` text,
| |
| `thumb` text,
| |
| `micro` text,
| |
| `site-pubkey` text,
| |
| `issued-id` varchar(255) NOT NULL DEFAULT '',
| |
| `dfrn-id` varchar(255) NOT NULL DEFAULT '',
| |
| `url` varchar(255) NOT NULL DEFAULT '',
| |
| `nurl` varchar(255) NOT NULL DEFAULT '',
| |
| `addr` varchar(255) NOT NULL DEFAULT '',
| |
| `alias` varchar(255) NOT NULL DEFAULT '',
| |
| `pubkey` text,
| |
| `prvkey` text,
| |
| `batch` varchar(255) NOT NULL DEFAULT '',
| |
| `request` text,
| |
| `notify` text,
| |
| `poll` text,
| |
| `confirm` text,
| |
| `poco` text,
| |
| `aes_allow` tinyint(1) NOT NULL DEFAULT 0,
| |
| `ret-aes` tinyint(1) NOT NULL DEFAULT 0,
| |
| `usehub` tinyint(1) NOT NULL DEFAULT 0,
| |
| `subhub` tinyint(1) NOT NULL DEFAULT 0,
| |
| `hub-verify` varchar(255) NOT NULL DEFAULT '',
| |
| `last-update` datetime DEFAULT NULL,
| |
| `success_update` datetime DEFAULT NULL,
| |
| `failure_update` datetime DEFAULT NULL,
| |
| `name-date` datetime DEFAULT NULL,
| |
| `uri-date` datetime DEFAULT NULL,
| |
| `avatar-date` datetime DEFAULT NULL,
| |
| `term-date` datetime DEFAULT NULL,
| |
| `last-item` datetime DEFAULT NULL,
| |
| `priority` tinyint(3) NOT NULL DEFAULT 0,
| |
| `blocked` tinyint(1) NOT NULL DEFAULT 1,
| |
| `readonly` tinyint(1) NOT NULL DEFAULT 0,
| |
| `writable` tinyint(1) NOT NULL DEFAULT 0,
| |
| `forum` tinyint(1) NOT NULL DEFAULT 0,
| |
| `prv` tinyint(1) NOT NULL DEFAULT 0,
| |
| `contact-type` int(11) unsigned NOT NULL DEFAULT 0,
| |
| `hidden` tinyint(1) NOT NULL DEFAULT 0,
| |
| `archive` tinyint(1) NOT NULL DEFAULT 0,
| |
| `pending` tinyint(1) NOT NULL DEFAULT 1,
| |
| `rating` tinyint(1) NOT NULL DEFAULT 0,
| |
| `reason` text,
| |
| `closeness` tinyint(2) NOT NULL DEFAULT 99,
| |
| `info` mediumtext,
| |
| `profile-id` int(11) NOT NULL DEFAULT 0,
| |
| `bdyear` varchar(4) NOT NULL DEFAULT '',
| |
| `bd` date DEFAULT NULL,
| |
| `notify_new_posts` tinyint(1) NOT NULL DEFAULT 0,
| |
| `fetch_further_information` tinyint(1) NOT NULL DEFAULT 0,
| |
| `ffi_keyword_blacklist` text,
| |
| PRIMARY KEY(`id`),
| |
| INDEX `uid_name` (`uid`,`name`),
| |
| INDEX `self_uid` (`self`,`uid`),
| |
| INDEX `alias_uid` (`alias`(32),`uid`),
| |
| INDEX `pending_uid` (`pending`,`uid`),
| |
| INDEX `blocked_uid` (`blocked`,`uid`),
| |
| INDEX `uid_rel_network_poll` (`uid`,`rel`,`network`,`poll`(64),`archive`),
| |
| INDEX `uid_network_batch` (`uid`,`network`,`batch`(64)),
| |
| INDEX `addr_uid` (`addr`(32),`uid`),
| |
| INDEX `nurl_uid` (`nurl`(32),`uid`),
| |
| INDEX `nick_uid` (`nick`(32),`uid`),
| |
| INDEX `dfrn-id` (`dfrn-id`),
| |
| INDEX `issued-id` (`issued-id`)
| |
| ) DEFAULT CHARSET=utf8mb4;</mysql>
| |
| 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'll find out...
| |
| |
| |
| ===copy data===
| |
| <mysql>INSERT INTO `contact`(
| |
| `id`,
| |
| `uid`,
| |
| `created`,
| |
| `self`,
| |
| `remote_self`,
| |
| `rel`,
| |
| `duplex`,
| |
| `network`,
| |
| `name`,
| |
| `nick`,
| |
| `attag`,
| |
| `photo`,
| |
| `thumb`,
| |
| `micro`,
| |
| `site-pubkey`,
| |
| `issued-id`,
| |
| `dfrn-id`,
| |
| `url`,
| |
| `nurl`,
| |
| `addr`,
| |
| `alias`,
| |
| `pubkey`,
| |
| `prvkey`,
| |
| `batch`,
| |
| `request`,
| |
| `notify`,
| |
| `poll`,
| |
| `confirm`,
| |
| `poco`,
| |
| `aes_allow`,
| |
| `ret-aes`,
| |
| `usehub`,
| |
| `subhub`,
| |
| `hub-verify`,
| |
| `last-update`,
| |
| `success_update`,
| |
| `name-date`,
| |
| `uri-date`,
| |
| `avatar-date`,
| |
| `term-date`,
| |
| `priority`,
| |
| `blocked`,
| |
| `readonly`,
| |
| `writable`,
| |
| `forum`,
| |
| `prv`,
| |
| `hidden`,
| |
| `archive`,
| |
| `pending`,
| |
| `rating`,
| |
| `reason`,
| |
| `closeness`,
| |
| `info`,
| |
| `profile-id`,
| |
| `bdyear`,
| |
| `bd`,
| |
| `notify_new_posts`,
| |
| `fetch_further_information`,
| |
| `ffi_keyword_blacklist`
| |
| )
| |
| SELECT
| |
| `id`,
| |
| `uid`,
| |
| `created`,
| |
| `self`,
| |
| `remote_self`,
| |
| `rel`,
| |
| `duplex`,
| |
| `network`,
| |
| `name`,
| |
| `nick`,
| |
| `attag`,
| |
| `photo`,
| |
| `thumb`,
| |
| `micro`,
| |
| `site-pubkey`,
| |
| `issued-id`,
| |
| `dfrn-id`,
| |
| `url`,
| |
| `nurl`,
| |
| `addr`,
| |
| `alias`,
| |
| `pubkey`,
| |
| `prvkey`,
| |
| `batch`,
| |
| `request`,
| |
| `notify`,
| |
| `poll`,
| |
| `confirm`,
| |
| `poco`,
| |
| `aes_allow`,
| |
| `ret-aes`,
| |
| `usehub`,
| |
| `subhub`,
| |
| `hub-verify`,
| |
| IF(UNIX_TIMESTAMP(`last-update`)=0,NULL,`last-update`),
| |
| IF(UNIX_TIMESTAMP(`success_update`)=0,NULL,`success_update`),
| |
| IF(UNIX_TIMESTAMP(`name-date`)=0,NULL,`name-date`),
| |
| IF(UNIX_TIMESTAMP(`uri-date`)=0,NULL,`uri-date`),
| |
| IF(UNIX_TIMESTAMP(`avatar-date`)=0,NULL,`avatar-date`),
| |
| IF(UNIX_TIMESTAMP(`term-date`)=0,NULL,`term-date`),
| |
| `priority`,
| |
| `blocked`,
| |
| `readonly`,
| |
| `writable`,
| |
| `forum`,
| |
| `prv`,
| |
| `hidden`,
| |
| `archive`,
| |
| `pending`,
| |
| `rating`,
| |
| `reason`,
| |
| `closeness`,
| |
| `info`,
| |
| `profile-id`,
| |
| `bdyear`,
| |
| IF(UNIX_TIMESTAMP(`bd`)=0,NULL,`bd`),
| |
| `notify_new_posts`,
| |
| `fetch_further_information`,
| |
| `ffi_keyword_blacklist`
| |
| FROM `icms-fka`.`contact-original`;</mysql>
| |
| The "UNIX_TIMESTAMP()" function was necessary because I would get errors even when comparing the field to '0000-00-00 00:00:00'. If there were any illegal values other than that, I couldn'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` != '0000-00-00 00:00:00').
| |
| |}
| |