root/trunk/bin/upgrading/update-db-general.pl @ 919

Revision 919, 47.5 KB (checked in by bradfitz, 11 years ago)

promos? hah. old-skool. bye. that was from before we ever had a business model.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1#
2# database schema & data info
3#
4
5mark_clustered("useridmap", "userbio", "syncupdates2", "cmdbuffer", "dudata",
6               "log2", "logtext2", "logsubject2", "logprop2", "logsec2",
7               "talk2", "talkprop2", "talktext2", "talkleft",
8               "userpicblob2", "events"
9               );
10
11register_tablecreate("adopt", <<'EOC');
12CREATE TABLE adopt (
13  adoptid int(10) unsigned NOT NULL auto_increment,
14  helperid int(10) unsigned NOT NULL default '0',
15  newbieid int(10) unsigned NOT NULL default '0',
16  changetime datetime NOT NULL default '0000-00-00 00:00:00',
17  PRIMARY KEY  (adoptid),
18  KEY (helperid),
19  KEY (newbieid)
20)
21EOC
22
23register_tablecreate("adoptlast", <<'EOC');
24CREATE TABLE adoptlast (
25  userid int(10) unsigned NOT NULL default '0',
26  lastassigned datetime NOT NULL default '0000-00-00 00:00:00',
27  lastadopted datetime NOT NULL default '0000-00-00 00:00:00',
28  PRIMARY KEY  (userid)
29)
30EOC
31
32register_tablecreate("authactions", <<'EOC');
33CREATE TABLE authactions (
34  aaid int(10) unsigned NOT NULL auto_increment,
35  userid int(10) unsigned NOT NULL default '0',
36  datecreate datetime NOT NULL default '0000-00-00 00:00:00',
37  authcode varchar(20) default NULL,
38  action varchar(50) default NULL,
39  arg1 varchar(255) default NULL,
40  PRIMARY KEY  (aaid)
41)
42EOC
43
44register_tablecreate("ban", <<'EOC');
45CREATE TABLE ban (
46  userid int(10) unsigned NOT NULL default '0',
47  banneduserid int(10) unsigned NOT NULL default '0',
48  KEY (userid),
49  PRIMARY KEY  (userid,banneduserid)
50)
51EOC
52
53register_tablecreate("clients", <<'EOC');
54CREATE TABLE clients (
55  clientid smallint(5) unsigned NOT NULL auto_increment,
56  client varchar(40) default NULL,
57  PRIMARY KEY  (clientid),
58  KEY (client)
59)
60EOC
61
62post_create("clients",
63            "sqltry" => "INSERT INTO clients (client) SELECT DISTINCT client FROM logins",
64            );
65
66register_tablecreate("clientusage", <<'EOC');
67CREATE TABLE clientusage (
68  userid int(10) unsigned NOT NULL default '0',
69  clientid smallint(5) unsigned NOT NULL default '0',
70  lastlogin datetime NOT NULL default '0000-00-00 00:00:00',
71  PRIMARY KEY  (clientid,userid),
72  UNIQUE KEY userid (userid,clientid)
73)
74EOC
75   
76post_create("clientusage",
77            "sqltry" => "INSERT INTO clientusage SELECT u.userid, c.clientid, l.lastlogin FROM user u, clients c, logins l WHERE u.user=l.user AND l.client=c.client",
78            );
79
80register_tablecreate("codes", <<'EOC');
81CREATE TABLE codes (
82  type varchar(10) NOT NULL default '',
83  code varchar(7) NOT NULL default '',
84  item varchar(80) default NULL,
85  sortorder smallint(6) NOT NULL default '0',
86  PRIMARY KEY  (type,code)
87) PACK_KEYS=1
88EOC
89
90register_tablecreate("community", <<'EOC');
91CREATE TABLE community (
92  userid int(10) unsigned NOT NULL default '0',
93  ownerid int(10) unsigned NOT NULL default '0',
94  membership enum('open','closed') NOT NULL default 'open',
95  postlevel enum('members','select','screened') default NULL,
96  PRIMARY KEY  (userid)
97)
98EOC
99
100register_tablecreate("dirsearchres2", <<'EOC');
101CREATE TABLE dirsearchres2 (
102  qdigest varchar(32) NOT NULL default '',
103  dateins datetime NOT NULL default '0000-00-00 00:00:00',
104  userids blob,
105  PRIMARY KEY  (qdigest),
106  KEY (dateins)
107)
108EOC
109
110register_tablecreate("duplock", <<'EOC');
111CREATE TABLE duplock (
112  realm enum('support','log','comment') NOT NULL default 'support',
113  reid int(10) unsigned NOT NULL default '0',
114  userid int(10) unsigned NOT NULL default '0',
115  digest char(32) NOT NULL default '',
116  dupid int(10) unsigned NOT NULL default '0',
117  instime datetime NOT NULL default '0000-00-00 00:00:00',
118  KEY (realm,reid,userid)
119)
120EOC
121
122register_tablecreate("faq", <<'EOC');
123CREATE TABLE faq (
124  faqid mediumint(8) unsigned NOT NULL auto_increment,
125  question text,
126  answer text,
127  sortorder int(11) default NULL,
128  faqcat varchar(20) default NULL,
129  lastmodtime datetime default NULL,
130  lastmoduserid int(10) unsigned NOT NULL default '0',
131  PRIMARY KEY  (faqid)
132) PACK_KEYS=1
133EOC
134
135register_tablecreate("faqcat", <<'EOC');
136CREATE TABLE faqcat (
137  faqcat varchar(20) NOT NULL default '',
138  faqcatname varchar(100) default NULL,
139  catorder int(11) default '50',
140  PRIMARY KEY  (faqcat)
141) PACK_KEYS=1
142EOC
143
144register_tablecreate("faquses", <<'EOC');
145CREATE TABLE faquses (
146  faqid MEDIUMINT UNSIGNED NOT NULL,
147  userid INT UNSIGNED NOT NULL,
148  dateview DATETIME NOT NULL,
149  PRIMARY KEY (userid, faqid),
150  KEY (faqid),
151  KEY (dateview)
152)
153EOC
154
155register_tablecreate("friendgroup", <<'EOC');
156CREATE TABLE friendgroup (
157  userid int(10) unsigned NOT NULL default '0',
158  groupnum tinyint(3) unsigned NOT NULL default '0',
159  groupname varchar(30) NOT NULL default '',
160  sortorder tinyint(3) unsigned NOT NULL default '50',
161  is_public enum('0','1') NOT NULL default '0',
162  PRIMARY KEY  (userid,groupnum)
163)
164EOC
165
166register_tablecreate("friends", <<'EOC');
167CREATE TABLE friends (
168  userid int(10) unsigned NOT NULL default '0',
169  friendid int(10) unsigned NOT NULL default '0',
170  fgcolor char(7) default NULL,
171  bgcolor char(7) default NULL,
172  groupmask int(10) unsigned NOT NULL default '1',
173  showbydefault enum('1','0') NOT NULL default '1',
174  PRIMARY KEY  (userid,friendid),
175  KEY (friendid)
176)
177EOC
178
179register_tablecreate("interests", <<'EOC');
180CREATE TABLE interests (
181  intid int(10) unsigned NOT NULL auto_increment,
182  interest varchar(255) NOT NULL default '',
183  intcount mediumint(8) unsigned default NULL,
184  PRIMARY KEY  (intid),
185  KEY (interest)
186)
187EOC
188
189register_tablecreate("keywords", <<'EOC');
190CREATE TABLE keywords (
191  kwid int(10) unsigned NOT NULL auto_increment,
192  keyword varchar(80) binary NOT NULL default '',
193  PRIMARY KEY  (kwid),
194  UNIQUE KEY kwidx (keyword)
195)
196EOC
197
198register_tablecreate("log", <<'EOC');
199CREATE TABLE log (
200  ownerid int(10) unsigned NOT NULL default '0',
201  posterid int(10) unsigned NOT NULL default '0',
202  eventtime datetime default NULL,
203  logtime datetime default NULL,
204  itemid int(10) unsigned NOT NULL auto_increment,
205  compressed char(1) NOT NULL default 'N',
206  security enum('public','private','usemask') NOT NULL default 'public',
207  allowmask int(10) unsigned NOT NULL default '0',
208  replycount smallint(5) unsigned default NULL,
209  year smallint(6) NOT NULL default '0',
210  month tinyint(4) NOT NULL default '0',
211  day tinyint(4) NOT NULL default '0',
212  PRIMARY KEY  (itemid),
213  KEY (year,month,day),
214  KEY (ownerid,year,month,day),
215  KEY (eventtime),
216  KEY (logtime)
217
218EOC
219
220register_tablecreate("logaccess", <<'EOC');
221CREATE TABLE logaccess (
222  ownerid int(10) unsigned NOT NULL default '0',
223  posterid int(10) unsigned NOT NULL default '0',
224  KEY (posterid),
225  PRIMARY KEY  (ownerid,posterid)
226)
227EOC
228
229register_tablecreate("logprop", <<'EOC');
230CREATE TABLE logprop (
231  itemid int(10) unsigned NOT NULL default '0',
232  propid tinyint(3) unsigned NOT NULL default '0',
233  value varchar(255) default NULL,
234  PRIMARY KEY  (itemid,propid)
235)
236EOC
237
238register_tablecreate("logproplist", <<'EOC');
239CREATE TABLE logproplist (
240  propid tinyint(3) unsigned NOT NULL auto_increment,
241  name varchar(50) default NULL,
242  prettyname varchar(60) default NULL,
243  sortorder mediumint(8) unsigned default NULL,
244  datatype enum('char','num','bool') NOT NULL default 'char',
245  des varchar(255) default NULL,
246  PRIMARY KEY  (propid),
247  UNIQUE KEY name (name)
248)
249EOC
250
251register_tablecreate("logsec", <<'EOC');
252CREATE TABLE logsec (
253  ownerid int(10) unsigned NOT NULL default '0',
254  itemid int(10) unsigned NOT NULL default '0',
255  allowmask int(10) unsigned NOT NULL default '0',
256  PRIMARY KEY  (ownerid,itemid)
257)
258EOC
259
260register_tablecreate("logsubject", <<'EOC');
261CREATE TABLE logsubject (
262  itemid int(10) unsigned NOT NULL default '0',
263  subject varchar(255) default NULL,
264  PRIMARY KEY  (itemid)
265)
266EOC
267
268register_tablecreate("logtext", <<'EOC');
269CREATE TABLE logtext (
270  itemid int(10) unsigned NOT NULL default '0',
271  subject varchar(255) default NULL,
272  event text,
273  PRIMARY KEY  (itemid)
274)
275EOC
276
277register_tablecreate("memkeyword", <<'EOC');
278CREATE TABLE memkeyword (
279  memid int(10) unsigned NOT NULL default '0',
280  kwid int(10) unsigned NOT NULL default '0',
281  PRIMARY KEY  (memid,kwid)
282)
283EOC
284
285register_tablecreate("memorable", <<'EOC');
286CREATE TABLE memorable (
287  memid int(10) unsigned NOT NULL auto_increment,
288  userid int(10) unsigned NOT NULL default '0',
289  itemid int(10) unsigned NOT NULL default '0',
290  des varchar(60) default NULL,
291  security enum('public','friends','private') NOT NULL default 'public',
292  PRIMARY KEY  (memid),
293  UNIQUE KEY userid (userid,itemid),
294  KEY (itemid)
295)
296EOC
297
298register_tablecreate("moods", <<'EOC');
299CREATE TABLE moods (
300  moodid int(10) unsigned NOT NULL auto_increment,
301  mood varchar(40) default NULL,
302  parentmood int(10) unsigned NOT NULL default '0',
303  PRIMARY KEY  (moodid),
304  UNIQUE KEY mood (mood)
305)
306EOC
307
308register_tablecreate("moodthemedata", <<'EOC');
309CREATE TABLE moodthemedata (
310  moodthemeid int(10) unsigned NOT NULL default '0',
311  moodid int(10) unsigned NOT NULL default '0',
312  picurl varchar(100) default NULL,
313  width tinyint(3) unsigned NOT NULL default '0',
314  height tinyint(3) unsigned NOT NULL default '0',
315  KEY (moodthemeid),
316  PRIMARY KEY  (moodthemeid,moodid)
317)
318EOC
319
320register_tablecreate("moodthemes", <<'EOC');
321CREATE TABLE moodthemes (
322  moodthemeid int(10) unsigned NOT NULL auto_increment,
323  ownerid int(10) unsigned NOT NULL default '0',
324  name varchar(50) default NULL,
325  des varchar(100) default NULL,
326  is_public enum('Y','N') NOT NULL default 'N',
327  PRIMARY KEY  (moodthemeid),
328  KEY (is_public),
329  KEY (ownerid)
330)
331EOC
332
333register_tablecreate("news_sent", <<'EOC');
334CREATE TABLE news_sent (
335  newsid int(10) unsigned NOT NULL auto_increment,
336  newsnum mediumint(8) unsigned NOT NULL default '0',
337  user varchar(15) NOT NULL default '',
338  datesent datetime default NULL,
339  email varchar(100) NOT NULL default '',
340  PRIMARY KEY  (newsid),
341  KEY (newsnum),
342  KEY (user),
343  KEY (email)
344) PACK_KEYS=1
345EOC
346
347register_tablecreate("noderefs", <<'EOC');
348CREATE TABLE noderefs (
349  nodetype char(1) NOT NULL default '',
350  nodeid int(10) unsigned NOT NULL default '0',
351  urlmd5 varchar(32) NOT NULL default '',
352  url varchar(120) NOT NULL default '',
353  PRIMARY KEY  (nodetype,nodeid,urlmd5)
354)
355EOC
356
357register_tablecreate("overrides", <<'EOC');
358CREATE TABLE overrides (
359  user varchar(15) NOT NULL default '',
360  override text,
361  PRIMARY KEY  (user)
362)
363EOC
364
365register_tablecreate("poll", <<'EOC');
366CREATE TABLE poll (
367  pollid int(10) unsigned NOT NULL auto_increment,
368  itemid int(10) unsigned NOT NULL default '0',
369  journalid int(10) unsigned NOT NULL default '0',
370  posterid int(10) unsigned NOT NULL default '0',
371  whovote enum('all','friends') NOT NULL default 'all',
372  whoview enum('all','friends','none') NOT NULL default 'all',
373  name varchar(255) default NULL,
374  PRIMARY KEY  (pollid),
375  KEY (itemid),
376  KEY (journalid),
377  KEY (posterid)
378)
379EOC
380
381register_tablecreate("pollitem", <<'EOC');
382CREATE TABLE pollitem (
383  pollid int(10) unsigned NOT NULL default '0',
384  pollqid tinyint(3) unsigned NOT NULL default '0',
385  pollitid tinyint(3) unsigned NOT NULL default '0',
386  sortorder tinyint(3) unsigned NOT NULL default '0',
387  item varchar(255) default NULL,
388  PRIMARY KEY  (pollid,pollqid,pollitid)
389)
390EOC
391
392register_tablecreate("pollquestion", <<'EOC');
393CREATE TABLE pollquestion (
394  pollid int(10) unsigned NOT NULL default '0',
395  pollqid tinyint(3) unsigned NOT NULL default '0',
396  sortorder tinyint(3) unsigned NOT NULL default '0',
397  type enum('check','radio','drop','text','scale') default NULL,
398  opts varchar(20) default NULL,
399  qtext text,
400  PRIMARY KEY  (pollid,pollqid)
401)
402EOC
403
404register_tablecreate("pollresult", <<'EOC');
405CREATE TABLE pollresult (
406  pollid int(10) unsigned NOT NULL default '0',
407  pollqid tinyint(3) unsigned NOT NULL default '0',
408  userid int(10) unsigned NOT NULL default '0',
409  value varchar(255) default NULL,
410  PRIMARY KEY  (pollid,pollqid,userid),
411  KEY (pollid,userid)
412)
413EOC
414
415register_tablecreate("pollsubmission", <<'EOC');
416CREATE TABLE pollsubmission (
417  pollid int(10) unsigned NOT NULL default '0',
418  userid int(10) unsigned NOT NULL default '0',
419  datesubmit datetime NOT NULL default '0000-00-00 00:00:00',
420  PRIMARY KEY  (pollid,userid),
421  KEY (userid)
422)
423EOC
424
425register_tablecreate("priv_list", <<'EOC');
426CREATE TABLE priv_list (
427  prlid smallint(5) unsigned NOT NULL auto_increment,
428  privcode varchar(20) NOT NULL default '',
429  privname varchar(40) default NULL,
430  des varchar(255) default NULL,
431  is_public ENUM('1', '0') DEFAULT '1' NOT NULL,
432  PRIMARY KEY  (prlid),
433  UNIQUE KEY privcode (privcode)
434)
435EOC
436
437register_tablecreate("priv_map", <<'EOC');
438CREATE TABLE priv_map (
439  prmid mediumint(8) unsigned NOT NULL auto_increment,
440  userid int(10) unsigned NOT NULL default '0',
441  prlid smallint(5) unsigned NOT NULL default '0',
442  arg varchar(40) default NULL,
443  PRIMARY KEY  (prmid),
444  KEY (userid),
445  KEY (prlid)
446)
447EOC
448
449register_tablecreate("querybuffer", <<'EOC');
450CREATE TABLE querybuffer (
451  qbid int(10) unsigned NOT NULL auto_increment,
452  tablename varchar(30) NOT NULL default '',
453  instime datetime NOT NULL default '0000-00-00 00:00:00',
454  query text NOT NULL,
455  PRIMARY KEY  (qbid),
456  KEY (tablename)
457)
458EOC
459
460register_tablecreate("cmdbuffer", <<'EOC');
461CREATE TABLE cmdbuffer (
462  cbid INT UNSIGNED NOT NULL AUTO_INCREMENT,
463  journalid INT UNSIGNED NOT NULL,
464  cmd VARCHAR(30) NOT NULL default '',
465  instime datetime NOT NULL default '0000-00-00 00:00:00',
466  args TEXT NOT NULL,
467  PRIMARY KEY  (cbid),
468  KEY (cmd),
469  KEY (journalid)
470)
471EOC
472
473register_tablecreate("randomuserset", <<'EOC');
474CREATE TABLE randomuserset (
475  rid INT UNSIGNED NOT NULL AUTO_INCREMENT,
476  userid INT UNSIGNED NOT NULL,
477  PRIMARY KEY  (rid)
478)
479EOC
480
481register_tablecreate("schemacols", <<'EOC');
482CREATE TABLE schemacols (
483  tablename varchar(40) NOT NULL default '',
484  colname varchar(40) NOT NULL default '',
485  des varchar(255) default NULL,
486  PRIMARY KEY  (tablename,colname)
487)
488EOC
489
490register_tablecreate("schematables", <<'EOC');
491CREATE TABLE schematables (
492  tablename varchar(40) NOT NULL default '',
493  public_browsable enum('0','1') NOT NULL default '0',
494  redist_mode enum('off','insert','replace') NOT NULL default 'off',
495  des text,
496  PRIMARY KEY  (tablename)
497)
498EOC
499
500register_tablecreate("stats", <<'EOC');
501CREATE TABLE stats (
502  statcat varchar(30) NOT NULL,
503  statkey varchar(150) NOT NULL,
504  statval int(10) unsigned NOT NULL,
505  UNIQUE KEY statcat_2 (statcat,statkey)
506)
507EOC
508
509register_tablecreate("style", <<'EOC');
510CREATE TABLE style (
511  styleid int(11) NOT NULL auto_increment,
512  user varchar(15) NOT NULL default '',
513  styledes varchar(50) default NULL,
514  type varchar(10) NOT NULL default '',
515  formatdata text,
516  is_public enum('Y','N') NOT NULL default 'N',
517  is_embedded enum('Y','N') NOT NULL default 'N',
518  is_colorfree enum('Y','N') NOT NULL default 'N',
519  opt_cache enum('Y','N') NOT NULL default 'N',
520  has_ads enum('Y','N') NOT NULL default 'N',
521  lastupdate datetime NOT NULL default '0000-00-00 00:00:00',
522  PRIMARY KEY  (styleid),
523  KEY (user),
524  KEY (type)
525)  PACK_KEYS=1
526EOC
527
528register_tablecreate("support", <<'EOC');
529CREATE TABLE support (
530  spid int(10) unsigned NOT NULL auto_increment,
531  reqtype enum('user','email') default NULL,
532  requserid int(10) unsigned NOT NULL default '0',
533  reqname varchar(50) default NULL,
534  reqemail varchar(70) default NULL,
535  state enum('open','closed') default NULL,
536  authcode varchar(15) NOT NULL default '',
537  spcatid int(10) unsigned NOT NULL default '0',
538  subject varchar(80) default NULL,
539  timecreate int(10) unsigned default NULL,
540  timetouched int(10) unsigned default NULL,
541  timeclosed int(10) unsigned default NULL,
542  PRIMARY KEY  (spid),
543  KEY (state)
544)
545EOC
546
547register_tablecreate("supportcat", <<'EOC');
548CREATE TABLE supportcat (
549  spcatid int(10) unsigned NOT NULL auto_increment,
550  catname varchar(80) default NULL,
551  sortorder mediumint(8) unsigned NOT NULL default '0',
552  basepoints tinyint(3) unsigned NOT NULL default '1',
553  PRIMARY KEY  (spcatid)
554)
555EOC
556
557register_tablecreate("supportlog", <<'EOC');
558CREATE TABLE supportlog (
559  splid int(10) unsigned NOT NULL auto_increment,
560  spid int(10) unsigned NOT NULL default '0',
561  timelogged int(10) unsigned NOT NULL default '0',
562  type enum('req','custom','faqref') default NULL,
563  faqid mediumint(8) unsigned NOT NULL default '0',
564  userid int(10) unsigned NOT NULL default '0',
565  message text,
566  PRIMARY KEY  (splid),
567  KEY (spid)
568)
569EOC
570
571register_tablecreate("supportnotify", <<'EOC');
572CREATE TABLE supportnotify (
573  spcatid int(10) unsigned NOT NULL default '0',
574  userid int(10) unsigned NOT NULL default '0',
575  level enum('all','new') default NULL,
576  KEY (spcatid),
577  KEY (userid),
578  PRIMARY KEY  (spcatid,userid)
579)
580EOC
581
582register_tablecreate("supportpoints", <<'EOC');
583CREATE TABLE supportpoints (
584  spid int(10) unsigned NOT NULL default '0',
585  userid int(10) unsigned NOT NULL default '0',
586  points tinyint(3) unsigned default NULL,
587  KEY (spid),
588  KEY (userid)
589)
590EOC
591
592register_tablecreate("syncupdates", <<'EOC');
593CREATE TABLE syncupdates (
594  userid int(10) unsigned NOT NULL default '0',
595  atime datetime NOT NULL default '0000-00-00 00:00:00',
596  nodetype char(1) NOT NULL default '',
597  nodeid int(10) unsigned NOT NULL default '0',
598  atype enum('create','update') NOT NULL default 'create',
599  PRIMARY KEY  (userid,nodetype,nodeid),
600  KEY (userid,atime)
601)
602EOC
603
604register_tablecreate("syncupdates2", <<'EOC');
605CREATE TABLE syncupdates2 (
606  userid INT UNSIGNED NOT NULL,
607  atime DATETIME NOT NULL,
608  nodetype CHAR(1) NOT NULL,
609  nodeid MEDIUMINT UNSIGNED NOT NULL,
610  atype ENUM('create','update','del') NOT NULL DEFAULT 'create',
611  PRIMARY KEY  (userid,nodetype,nodeid),
612  KEY (userid,atime)
613)
614EOC
615
616register_tablecreate("talk", <<'EOC');
617CREATE TABLE talk (
618  talkid int(10) unsigned NOT NULL auto_increment,
619  nodetype char(1) NOT NULL default '',
620  nodeid int(10) unsigned NOT NULL default '0',
621  parenttalkid int(10) unsigned NOT NULL default '0',
622  journalid int(10) unsigned NOT NULL default '0',
623  posterid int(10) unsigned NOT NULL default '0',
624  datepost datetime NOT NULL default '0000-00-00 00:00:00',
625  state char(1) default 'A',
626  PRIMARY KEY  (talkid),
627  KEY (nodetype,nodeid),
628  KEY (journalid,state,nodetype),
629  KEY (posterid,nodetype)
630)
631EOC
632
633register_tablecreate("talkprop", <<'EOC');
634CREATE TABLE talkprop (
635  talkid int(10) unsigned NOT NULL default '0',
636  tpropid tinyint(3) unsigned NOT NULL default '0',
637  value varchar(255) default NULL,
638  PRIMARY KEY  (talkid,tpropid)
639)
640EOC
641
642register_tablecreate("talkproplist", <<'EOC');
643CREATE TABLE talkproplist (
644  tpropid smallint(5) unsigned NOT NULL auto_increment,
645  name varchar(50) default NULL,
646  prettyname varchar(60) default NULL,
647  datatype enum('char','num','bool') NOT NULL default 'char',
648  des varchar(255) default NULL,
649  PRIMARY KEY  (tpropid),
650  UNIQUE KEY name (name)
651)
652EOC
653
654register_tablecreate("talktext", <<'EOC');
655CREATE TABLE talktext (
656  talkid int(10) unsigned NOT NULL default '0',
657  subject varchar(100) default NULL,
658  body text,
659  PRIMARY KEY  (talkid)
660)
661EOC
662
663register_tablecreate("themecoltypes", <<'EOC');
664CREATE TABLE themecoltypes (
665  coltype varchar(30) NOT NULL default '',
666  des varchar(100) default NULL,
667  sortorder smallint(5) unsigned default NULL,
668  PRIMARY KEY  (coltype)
669) PACK_KEYS=1
670EOC
671
672register_tablecreate("themecustom", <<'EOC');
673CREATE TABLE themecustom (
674  user varchar(15) NOT NULL default '',
675  coltype varchar(30) default NULL,
676  color varchar(30) default NULL,
677  KEY (user)
678) PACK_KEYS=1
679EOC
680
681register_tablecreate("themedata", <<'EOC');
682CREATE TABLE themedata (
683  themeid mediumint(8) unsigned NOT NULL default '0',
684  coltype varchar(30) default NULL,
685  color varchar(30) default NULL,
686  KEY (themeid)
687) PACK_KEYS=1
688EOC
689
690register_tablecreate("themelist", <<'EOC');
691CREATE TABLE themelist (
692  themeid mediumint(8) unsigned NOT NULL auto_increment,
693  name varchar(50) NOT NULL default '',
694  PRIMARY KEY  (themeid)
695)
696EOC
697
698register_tablecreate("todo", <<'EOC');
699CREATE TABLE todo (
700  todoid int(10) unsigned NOT NULL auto_increment,
701  journalid int(10) unsigned NOT NULL default '0',
702  posterid int(10) unsigned NOT NULL default '0',
703  ownerid int(10) unsigned NOT NULL default '0',
704  statusline varchar(40) default NULL,
705  security enum('public','private','friends') NOT NULL default 'public',
706  subject varchar(100) default NULL,
707  des varchar(255) default NULL,
708  priority enum('1','2','3','4','5') NOT NULL default '3',
709  datecreate datetime NOT NULL default '0000-00-00 00:00:00',
710  dateupdate datetime default NULL,
711  datedue datetime default NULL,
712  dateclosed datetime default NULL,
713  progress tinyint(3) unsigned NOT NULL default '0',
714  PRIMARY KEY  (todoid),
715  KEY (journalid),
716  KEY (posterid),
717  KEY (ownerid)
718)
719EOC
720
721register_tablecreate("tododep", <<'EOC');
722CREATE TABLE tododep (
723  todoid int(10) unsigned NOT NULL default '0',
724  depid int(10) unsigned NOT NULL default '0',
725  PRIMARY KEY  (todoid,depid),
726  KEY (depid)
727)
728EOC
729
730register_tablecreate("todokeyword", <<'EOC');
731CREATE TABLE todokeyword (
732  todoid int(10) unsigned NOT NULL default '0',
733  kwid int(10) unsigned NOT NULL default '0',
734  PRIMARY KEY  (todoid,kwid)
735)
736EOC
737
738register_tablecreate("topic_cats", <<'EOC');
739CREATE TABLE topic_cats (
740  tpcatid smallint(5) unsigned NOT NULL auto_increment,
741  parent smallint(5) unsigned NOT NULL default '0',
742  catname varchar(80) default NULL,
743  status enum('on','off') NOT NULL default 'off',
744  topicsort enum('alpha','date') NOT NULL default 'alpha',
745  PRIMARY KEY  (tpcatid),
746  KEY (parent)
747)
748EOC
749
750register_tablecreate("topic_list", <<'EOC');
751CREATE TABLE topic_list (
752  tptopid mediumint(8) unsigned NOT NULL auto_increment,
753  tpcatid smallint(5) unsigned NOT NULL default '0',
754  topname varchar(80) NOT NULL default '',
755  des varchar(255) default NULL,
756  timeenter int(10) unsigned NOT NULL default '0',
757  timeexpire int(10) unsigned default NULL,
758  status enum('new','on','off','deny') NOT NULL default 'new',
759  PRIMARY KEY  (tptopid),
760  KEY (tpcatid),
761  KEY (status)
762)
763EOC
764
765register_tablecreate("topic_map", <<'EOC');
766CREATE TABLE topic_map (
767  tpmapid int(10) unsigned NOT NULL auto_increment,
768  tptopid mediumint(8) unsigned NOT NULL default '0',
769  itemid int(10) unsigned NOT NULL default '0',
770  status enum('new','on','off','deny') NOT NULL default 'new',
771  screendate datetime NOT NULL default '0000-00-00 00:00:00',
772  screenuserid int(10) unsigned NOT NULL default '0',
773  PRIMARY KEY  (tpmapid),
774  KEY (tptopid),
775  KEY (status),
776  UNIQUE KEY tptopid_2 (tptopid,itemid),
777  KEY (screendate),
778  KEY (itemid)
779)
780EOC
781
782register_tablecreate("tracking", <<'EOC');
783CREATE TABLE tracking (
784  userid int(10) unsigned NOT NULL default '0',
785  acttime datetime default NULL,
786  ip char(15) default NULL,
787  actdes char(10) default NULL,
788  associd int(10) unsigned NOT NULL default '0',
789  KEY (userid)
790)
791EOC
792
793register_tablecreate("txtmsg", <<'EOC');
794CREATE TABLE txtmsg (
795  userid int(10) unsigned NOT NULL default '0',
796  provider varchar(25) default NULL,
797  number varchar(60) default NULL,
798  security enum('all','reg','friends') NOT NULL default 'all',
799  PRIMARY KEY  (userid)
800)
801EOC
802
803register_tablecreate("user", <<'EOC');
804CREATE TABLE user (
805  userid int(10) unsigned NOT NULL auto_increment,
806  user char(15) default NULL,
807  caps SMALLINT UNSIGNED NOT NULL DEFAULT 0,
808  email char(50) default NULL,
809  password char(30) default NULL,
810  status char(1) NOT NULL default 'N',
811  statusvis char(1) NOT NULL default 'V',
812  statusvisdate datetime default NULL,
813  name char(50) default NULL,
814  bdate date default NULL,
815  themeid int(11) NOT NULL default '1',
816  moodthemeid int(10) unsigned NOT NULL default '1',
817  opt_forcemoodtheme enum('Y','N') NOT NULL default 'N',
818  allow_infoshow char(1) NOT NULL default 'Y',
819  allow_contactshow char(1) NOT NULL default 'Y',
820  allow_getljnews char(1) NOT NULL default 'N',
821  opt_showtalklinks char(1) NOT NULL default 'Y',
822  opt_whocanreply enum('all','reg','friends') NOT NULL default 'all',
823  opt_gettalkemail char(1) NOT NULL default 'Y',
824  opt_htmlemail enum('Y','N') NOT NULL default 'Y',
825  opt_mangleemail char(1) NOT NULL default 'N',
826  useoverrides char(1) NOT NULL default 'N',
827  defaultpicid int(10) unsigned default NULL,
828  has_bio enum('Y','N') NOT NULL default 'N',
829  txtmsg_status enum('none','on','off') NOT NULL default 'none',
830  track enum('no','yes') NOT NULL default 'no',
831  is_system enum('Y','N') NOT NULL default 'N',
832  journaltype enum('P','N','C','S') NOT NULL default 'P',
833  lang char(2) NOT NULL default 'EN',
834  PRIMARY KEY  (userid),
835  UNIQUE KEY user (user),
836  KEY (email),
837  KEY (status),
838  KEY (statusvis)
839)  PACK_KEYS=1
840EOC
841
842register_tablecreate("userbio", <<'EOC');
843CREATE TABLE userbio (
844  userid int(10) unsigned NOT NULL default '0',
845  bio text,
846  PRIMARY KEY  (userid)
847)
848EOC
849
850register_tablecreate("userinterests", <<'EOC');
851CREATE TABLE userinterests (
852  userid int(10) unsigned NOT NULL default '0',
853  intid int(10) unsigned NOT NULL default '0',
854  PRIMARY KEY  (userid,intid),
855  KEY (intid)
856)
857EOC
858
859register_tablecreate("userpic", <<'EOC');
860CREATE TABLE userpic (
861  picid int(10) unsigned NOT NULL auto_increment,
862  userid int(10) unsigned NOT NULL default '0',
863  contenttype char(25) default NULL,
864  width smallint(6) NOT NULL default '0',
865  height smallint(6) NOT NULL default '0',
866  state char(1) NOT NULL default 'N',
867  picdate datetime default NULL,
868  md5base64 char(22) NOT NULL default '',
869  PRIMARY KEY  (picid),
870  KEY (userid),
871  KEY (state)
872)
873EOC
874
875register_tablecreate("userpicblob", <<'EOC');
876CREATE TABLE userpicblob (
877  picid int(10) unsigned NOT NULL auto_increment,
878  imagedata blob,
879  PRIMARY KEY  (picid)
880)
881EOC
882
883register_tablecreate("userpicblob2", <<'EOC');
884CREATE TABLE userpicblob2 (
885  userid int unsigned not null,
886  picid int unsigned not null,
887  imagedata blob,
888  PRIMARY KEY (userid, picid)
889)
890EOC
891
892register_tablecreate("userpicmap", <<'EOC');
893CREATE TABLE userpicmap (
894  userid int(10) unsigned NOT NULL default '0',
895  kwid int(10) unsigned NOT NULL default '0',
896  picid int(10) unsigned NOT NULL default '0',
897  PRIMARY KEY  (userid,kwid)
898)
899EOC
900
901register_tablecreate("userprop", <<'EOC');
902CREATE TABLE userprop (
903  userid int(10) unsigned NOT NULL default '0',
904  upropid smallint(5) unsigned NOT NULL default '0',
905  value varchar(60) default NULL,
906  PRIMARY KEY  (userid,upropid),
907  KEY (upropid,value)
908)
909EOC
910
911register_tablecreate("userproplist", <<'EOC');
912CREATE TABLE userproplist (
913  upropid smallint(5) unsigned NOT NULL auto_increment,
914  name varchar(50) default NULL,
915  indexed enum('1','0') NOT NULL default '1',
916  prettyname varchar(60) default NULL,
917  datatype enum('char','num','bool') NOT NULL default 'char',
918  des varchar(255) default NULL,
919  PRIMARY KEY  (upropid),
920  UNIQUE KEY name (name)
921)
922EOC
923
924register_tablecreate("userproplite", <<'EOC');
925CREATE TABLE userproplite (
926  userid int(10) unsigned NOT NULL default '0',
927  upropid smallint(5) unsigned NOT NULL default '0',
928  value varchar(255) default NULL,
929  PRIMARY KEY  (userid,upropid),
930  KEY (upropid)
931)
932EOC
933
934register_tablecreate("zip", <<'EOC');
935CREATE TABLE zip (
936  zip varchar(5) NOT NULL default '',
937  state char(2) NOT NULL default '',
938  city varchar(100) NOT NULL default '',
939  PRIMARY KEY  (zip),
940  KEY (state)
941) PACK_KEYS=1
942EOC
943
944register_tablecreate("zips", <<'EOC');
945CREATE TABLE zips (
946  FIPS char(2) default NULL,
947  zip varchar(5) NOT NULL default '',
948  State char(2) NOT NULL default '',
949  Name varchar(30) NOT NULL default '',
950  alloc float(9,7) NOT NULL default '0.0000000',
951  pop1990 int(11) NOT NULL default '0',
952  lon float(10,7) NOT NULL default '0.0000000',
953  lat float(10,7) NOT NULL default '0.0000000',
954  PRIMARY KEY  (zip)
955)
956EOC
957
958################# above was a snapshot.  now, changes:
959
960register_tablecreate("recent_logtext", <<'EOC');
961CREATE TABLE recent_logtext (
962  itemid int(10) unsigned NOT NULL default '0',
963  subject varchar(255) default NULL,
964  event text,
965  PRIMARY KEY  (itemid)
966
967EOC
968
969register_tablecreate("recent_talktext", <<'EOC');
970CREATE TABLE recent_talktext (
971  talkid int(10) unsigned NOT NULL default '0',
972  subject varchar(100) default NULL,
973  body text,
974  PRIMARY KEY  (talkid)
975
976EOC
977
978register_tablecreate("log2", <<'EOC');
979CREATE TABLE log2 (
980  journalid INT UNSIGNED NOT NULL default '0',
981  jitemid MEDIUMINT UNSIGNED NOT NULL auto_increment,
982  PRIMARY KEY  (journalid, jitemid),
983  posterid int(10) unsigned NOT NULL default '0',
984  eventtime datetime default NULL,
985  logtime datetime default NULL,
986  compressed char(1) NOT NULL default 'N',
987  anum TINYINT UNSIGNED NOT NULL,
988  security enum('public','private','usemask') NOT NULL default 'public',
989  allowmask int(10) unsigned NOT NULL default '0',
990  replycount smallint(5) unsigned default NULL,
991  year smallint(6) NOT NULL default '0',
992  month tinyint(4) NOT NULL default '0',
993  day tinyint(4) NOT NULL default '0',
994  rlogtime int(10) unsigned NOT NULL default '0',
995  revttime int(10) unsigned NOT NULL default '0',
996  KEY (year,month,day),
997  KEY (journalid,year,month,day),
998  KEY (logtime),
999  KEY `rlogtime` (`journalid`,`rlogtime`),
1000  KEY `revttime` (`journalid`,`revttime`),
1001  KEY `posterid` (`posterid`,`journalid`)
1002)
1003EOC
1004
1005register_tablecreate("logtext2", <<'EOC');
1006CREATE TABLE logtext2 (
1007  journalid INT UNSIGNED NOT NULL,
1008  jitemid MEDIUMINT UNSIGNED NOT NULL,
1009  subject VARCHAR(255) DEFAULT NULL,
1010  event TEXT,
1011  PRIMARY KEY (journalid, jitemid)
1012) max_rows=100000000
1013EOC
1014
1015register_tablecreate("logsubject2", <<'EOC');
1016CREATE TABLE logsubject2 (
1017  journalid INT UNSIGNED NOT NULL,
1018  jitemid MEDIUMINT UNSIGNED NOT NULL,
1019  subject VARCHAR(255) DEFAULT NULL,
1020  PRIMARY KEY (journalid, jitemid)
1021) max_rows=100000000
1022EOC
1023
1024register_tablecreate("logprop2", <<'EOC');
1025CREATE TABLE logprop2 (
1026  journalid  INT UNSIGNED NOT NULL,
1027  jitemid MEDIUMINT UNSIGNED NOT NULL,
1028  propid TINYINT unsigned NOT NULL,
1029  value VARCHAR(255) default NULL,
1030  PRIMARY KEY (journalid,jitemid,propid)
1031)
1032EOC
1033
1034register_tablecreate("logsec2", <<'EOC');
1035CREATE TABLE logsec2 (
1036  journalid INT UNSIGNED NOT NULL,
1037  jitemid MEDIUMINT UNSIGNED NOT NULL,
1038  allowmask INT UNSIGNED NOT NULL,
1039  PRIMARY KEY (journalid,jitemid)
1040)
1041EOC
1042
1043register_tablecreate("talk2", <<'EOC');
1044CREATE TABLE talk2 (
1045  journalid INT UNSIGNED NOT NULL, 
1046  jtalkid MEDIUMINT UNSIGNED NOT NULL auto_increment,
1047  nodetype CHAR(1) NOT NULL DEFAULT '',
1048  nodeid INT UNSIGNED NOT NULL default '0',
1049  parenttalkid MEDIUMINT UNSIGNED NOT NULL,
1050  posterid INT UNSIGNED NOT NULL default '0',
1051  datepost DATETIME NOT NULL default '0000-00-00 00:00:00',
1052  state CHAR(1) default 'A',
1053  PRIMARY KEY  (journalid,jtalkid),
1054  KEY (nodetype,journalid,nodeid),
1055  KEY (journalid,state,nodetype),
1056  KEY (posterid)
1057)
1058EOC
1059
1060register_tablecreate("talkprop2", <<'EOC');
1061CREATE TABLE talkprop2 (
1062  journalid INT UNSIGNED NOT NULL,
1063  jtalkid MEDIUMINT UNSIGNED NOT NULL,
1064  tpropid TINYINT UNSIGNED NOT NULL,
1065  value VARCHAR(255) DEFAULT NULL,
1066  PRIMARY KEY  (journalid,jtalkid,tpropid)
1067)
1068EOC
1069
1070register_tablecreate("talktext2", <<'EOC');
1071CREATE TABLE talktext2 (
1072  journalid INT UNSIGNED NOT NULL,
1073  jtalkid MEDIUMINT UNSIGNED NOT NULL,
1074  subject VARCHAR(100) DEFAULT NULL,
1075  body TEXT,
1076  PRIMARY KEY (journalid, jtalkid)
1077) max_rows=100000000
1078EOC
1079
1080register_tablecreate("talkleft", <<'EOC');
1081CREATE TABLE talkleft (
1082  userid    INT UNSIGNED NOT NULL,
1083  posttime  INT UNSIGNED NOT NULL,
1084  INDEX (userid, posttime),
1085  journalid  INT UNSIGNED NOT NULL,
1086  nodetype   CHAR(1) NOT NULL,
1087  nodeid     INT UNSIGNED NOT NULL,
1088  INDEX (journalid, nodetype, nodeid),
1089  jtalkid    MEDIUMINT UNSIGNED NOT NULL,
1090  publicitem   ENUM('1','0') NOT NULL DEFAULT '1'
1091)
1092EOC
1093
1094register_tablecreate("talkleft_xfp", <<'EOC');
1095CREATE TABLE talkleft_xfp (
1096  userid    INT UNSIGNED NOT NULL,
1097  posttime  INT UNSIGNED NOT NULL,
1098  INDEX (userid, posttime),
1099  journalid  INT UNSIGNED NOT NULL,
1100  nodetype   CHAR(1) NOT NULL,
1101  nodeid     INT UNSIGNED NOT NULL,
1102  INDEX (journalid, nodetype, nodeid),
1103  jtalkid    MEDIUMINT UNSIGNED NOT NULL,
1104  publicitem   ENUM('1','0') NOT NULL DEFAULT '1'
1105)
1106EOC
1107
1108register_tabledrop("ibill_codes");
1109register_tabledrop("paycredit");
1110register_tabledrop("payments");
1111register_tabledrop("tmp_contributed");
1112register_tabledrop("transferinfo");
1113register_tabledrop("contest1");
1114register_tabledrop("contest1data");
1115register_tabledrop("logins");
1116register_tabledrop("hintfriendsview");
1117register_tabledrop("hintlastnview");
1118register_tabledrop("batchdelete");
1119register_tabledrop("ftpusers");
1120
1121register_tablecreate("portal", <<'EOC');
1122CREATE TABLE portal (
1123  userid int(10) unsigned NOT NULL default '0',
1124  loc enum('left','main','right','moz') NOT NULL default 'left',
1125  pos tinyint(3) unsigned NOT NULL default '0',
1126  boxname varchar(30) default NULL,
1127  boxargs varchar(255) default NULL,
1128  PRIMARY KEY  (userid,loc,pos),
1129  KEY boxname (boxname)
1130)
1131EOC
1132
1133register_tablecreate("infohistory", <<'EOC');
1134CREATE TABLE infohistory (
1135  userid int(10) unsigned NOT NULL default '0',
1136  what varchar(15) NOT NULL default '',
1137  timechange datetime NOT NULL default '0000-00-00 00:00:00',
1138  oldvalue varchar(255) default NULL,
1139  other varchar(30) default NULL,
1140  KEY userid (userid)
1141)
1142EOC
1143
1144register_tablecreate("useridmap", <<'EOC');
1145CREATE TABLE useridmap (
1146  userid int(10) unsigned NOT NULL,
1147  user char(15) NOT NULL,
1148  PRIMARY KEY  (userid),
1149  UNIQUE KEY user (user)
1150) PACK_KEYS=1
1151EOC
1152
1153post_create("useridmap",
1154            "sql" => "REPLACE INTO useridmap (userid, user) SELECT userid, user FROM user",
1155            );
1156
1157register_tablecreate("userusage", <<'EOC');
1158CREATE TABLE userusage
1159(
1160   userid INT UNSIGNED NOT NULL,
1161   PRIMARY KEY (userid),
1162   timecreate DATETIME NOT NULL,
1163   timeupdate DATETIME,
1164   timecheck DATETIME,
1165   lastitemid INT UNSIGNED NOT NULL DEFAULT '0',
1166   INDEX (timeupdate)
1167)
1168EOC
1169
1170register_tablecreate("userupdate", <<'EOC');
1171CREATE TABLE userupdate
1172(
1173   userid   INT UNSIGNED NOT NULL,
1174   groupbit TINYINT UNSIGNED NOT NULL,
1175   PRIMARY KEY (userid, groupbit),
1176   timeupdate DATETIME NOT NULL
1177)
1178EOC
1179
1180
1181post_create("userusage",
1182            "sqltry" => "INSERT IGNORE INTO userusage (userid, timecreate, timeupdate, timecheck, lastitemid) SELECT userid, timecreate, timeupdate, timecheck, lastitemid FROM user",
1183            "sqltry" => "ALTER TABLE user DROP timecreate, DROP timeupdate, DROP timecheck, DROP lastitemid",
1184            );
1185
1186register_tablecreate("acctcode", <<'EOC');
1187CREATE TABLE acctcode
1188(
1189  acid    INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
1190  userid  INT UNSIGNED NOT NULL,
1191  rcptid  INT UNSIGNED NOT NULL DEFAULT 0,
1192  auth    CHAR(5) NOT NULL,
1193  INDEX (userid),
1194  INDEX (rcptid)
1195)
1196EOC
1197
1198register_tablecreate("meme", <<'EOC');
1199CREATE TABLE meme (
1200  url       VARCHAR(150) NOT NULL,
1201  posterid  INT UNSIGNED NOT NULL,
1202  UNIQUE (url, posterid),
1203  ts        TIMESTAMP,
1204  itemid    INT UNSIGNED NOT NULL,
1205  INDEX (ts)
1206)
1207EOC
1208
1209register_tablecreate("statushistory", <<'EOC');
1210CREATE TABLE statushistory (
1211  userid    INT UNSIGNED NOT NULL,
1212  adminid   INT UNSIGNED NOT NULL,
1213  shtype    VARCHAR(20) NOT NULL,
1214  shdate    TIMESTAMP NOT NULL,
1215  notes     TEXT,
1216  INDEX (userid, shdate),
1217  INDEX (adminid, shdate),
1218  INDEX (adminid, shtype, shdate),
1219  INDEX (shtype, shdate)
1220)
1221EOC
1222
1223register_tablecreate("includetext", <<'EOC');
1224CREATE TABLE includetext (
1225  incname  VARCHAR(80) NOT NULL PRIMARY KEY,
1226  inctext  TEXT,
1227  updatetime   INT UNSIGNED NOT NULL,
1228  INDEX (updatetime)
1229)
1230EOC
1231
1232register_tablecreate("oldids", <<'EOC');
1233CREATE TABLE oldids (
1234  area     CHAR(1) NOT NULL,
1235  oldid    INT UNSIGNED NOT NULL,
1236  UNIQUE (area, oldid),
1237  userid   INT UNSIGNED NOT NULL,
1238  newid    INT UNSIGNED NOT NULL AUTO_INCREMENT,
1239  PRIMARY KEY (area,userid, newid),
1240  INDEX (userid)
1241)
1242EOC
1243
1244register_tablecreate("dudata", <<'EOC');
1245CREATE TABLE dudata (
1246  userid   INT UNSIGNED NOT NULL,
1247  area     CHAR(1) NOT NULL,
1248  areaid   INT UNSIGNED NOT NULL,
1249  bytes    MEDIUMINT UNSIGNED NOT NULL,
1250  PRIMARY KEY (userid, area, areaid)
1251)
1252EOC
1253
1254register_tablecreate("dbinfo", <<'EOC');
1255CREATE TABLE dbinfo (
1256  dbid    TINYINT UNSIGNED NOT NULL,
1257  name    VARCHAR(25),
1258  fdsn      VARCHAR(255),
1259  rootfdsn  VARCHAR(255),
1260  masterid  TINYINT UNSIGNED NOT NULL,
1261  PRIMARY KEY (dbid),
1262  UNIQUE (name)
1263)
1264EOC
1265
1266register_tablecreate("dbweights", <<'EOC');
1267CREATE TABLE dbweights (
1268  dbid    TINYINT UNSIGNED NOT NULL,
1269  role    VARCHAR(25) NOT NULL,
1270  PRIMARY KEY (dbid, role),
1271  norm    TINYINT UNSIGNED NOT NULL,
1272  curr    TINYINT UNSIGNED NOT NULL
1273)
1274EOC
1275
1276# notification/subscription stuff:
1277
1278register_tablecreate("subs", <<'EOC');  # global
1279CREATE TABLE subs (
1280  userid INT UNSIGNED NOT NULL,
1281  etype       CHAR(1) NOT NULL,
1282  ejournalid  INT UNSIGNED NOT NULL,
1283  eiarg       INT UNSIGNED NOT NULL,
1284  UNIQUE (userid, etype, ejournalid, eiarg),
1285  INDEX (etype, ejournalid, eiarg),
1286  subtime     DATETIME NOT NULL,
1287  exptime     DATETIME NOT NULL,
1288  INDEX (exptime),
1289  ntype      CHAR(1) NOT NULL
1290)
1291EOC
1292
1293register_tablecreate("events", <<'EOC');  # clustered
1294CREATE TABLE events (
1295  evtime  DATETIME NOT NULL,
1296  INDEX (evtime),
1297  etype  CHAR(1) NOT NULL,
1298  ejournalid  INT UNSIGNED NOT NULL,
1299  eiarg       INT UNSIGNED NOT NULL,
1300  duserid   INT UNSIGNED NOT NULL,
1301  diarg     INT UNSIGNED NOT NULL
1302)
1303EOC
1304
1305### changes
1306
1307register_alter(sub {
1308
1309    my $dbh = shift;
1310    my $runsql = shift;
1311
1312    if (column_type("supportcat", "is_selectable") eq "")
1313    {
1314        do_alter("supportcat",
1315                 "ALTER TABLE supportcat ADD is_selectable ENUM('1','0') ".
1316                 "NOT NULL DEFAULT '1', ADD public_read  ENUM('1','0') NOT ".
1317                 "NULL DEFAULT '1', ADD public_help ENUM('1','0') NOT NULL ".
1318                 "DEFAULT '1', ADD allow_screened ENUM('1','0') NOT NULL ".
1319                 "DEFAULT '0', ADD replyaddress VARCHAR(50), ADD hide_helpers ".
1320                 "ENUM('1','0') NOT NULL DEFAULT '0' AFTER allow_screened");
1321       
1322    }
1323    if (column_type("supportlog", "type") =~ /faqref/)
1324    {
1325        do_alter("supportlog",
1326                 "ALTER TABLE supportlog MODIFY type ENUM('req', 'answer', ".
1327                 "'custom', 'faqref', 'comment', 'internal', 'screened') ".
1328                 "NOT NULL");
1329        do_sql("UPDATE supportlog SET type='answer' WHERE type='custom'");
1330        do_sql("UPDATE supportlog SET type='answer' WHERE type='faqref'");
1331        do_alter("supportlog",
1332                 "ALTER TABLE supportlog MODIFY type ENUM('req', 'answer', ".
1333                 "'comment', 'internal', 'screened') NOT NULL");
1334       
1335    }
1336    if (table_relevant("supportcat") && column_type("supportcat", "catkey") eq "")
1337    {
1338        do_alter("supportcat",
1339                 "ALTER TABLE supportcat ADD catkey VARCHAR(25) AFTER spcatid");
1340        do_sql("UPDATE supportcat SET catkey=spcatid WHERE catkey IS NULL");
1341        do_alter("supportcat",
1342                 "ALTER TABLE supportcat MODIFY catkey VARCHAR(25) NOT NULL");
1343    }
1344    if (column_type("supportcat", "no_autoreply") eq "")
1345    {
1346        do_alter("supportcat",
1347                 "ALTER TABLE supportcat ADD no_autoreply ENUM('1', '0') ".
1348                 "NOT NULL DEFAULT '0'");
1349    }
1350   
1351    if (column_type("support", "timelasthelp") eq "")
1352    {
1353        do_alter("supportlog",
1354                 "ALTER TABLE supportlog ADD INDEX (userid)");
1355        do_alter("support",
1356                 "ALTER TABLE support ADD timelasthelp INT UNSIGNED");
1357    }
1358   
1359    if (column_type("user", "track") !~ /temp/)
1360    {
1361        do_alter("tracking",
1362                 "ALTER TABLE tracking ADD INDEX(ip)");
1363        do_alter("user",
1364                 "ALTER TABLE user MODIFY track ENUM('no','yes','temp'), ADD INDEX(track)");
1365    }
1366
1367    if (column_type("duplock", "realm") !~ /payments/)
1368    {
1369        do_alter("duplock",
1370                 "ALTER TABLE duplock MODIFY realm ENUM('support','log',".
1371                 "'comment','payments') NOT NULL default 'support'");
1372    }
1373
1374    if (column_type("schematables", "redist_where") eq "")
1375    {
1376        do_alter("schematables",
1377                 "ALTER TABLE schematables ADD ".
1378                 "redist_where varchar(255) AFTER redist_mode");
1379    }
1380   
1381    # upgrade people to the new capabilities system.  if they're
1382    # using the the paidfeatures column already, we'll assign them
1383    # the same capability bits that ljcom will be using.
1384    if (table_relevant("user") && column_type("user", "caps") eq "")
1385    {
1386        do_alter("user",
1387                 "ALTER TABLE user ADD ".
1388                 "caps SMALLINT UNSIGNED NOT NULL DEFAULT 0 AFTER user");
1389        try_sql("UPDATE user SET caps=16|8|2 WHERE paidfeatures='on'");
1390        try_sql("UPDATE user SET caps=8|2    WHERE paidfeatures='paid'");
1391        try_sql("UPDATE user SET caps=4|2    WHERE paidfeatures='early'");
1392        try_sql("UPDATE user SET caps=2      WHERE paidfeatures='off'");
1393    }
1394
1395    # axe this column (and its two related ones) if it exists.
1396    if (column_type("user", "paidfeatures"))
1397    {
1398        try_sql("REPLACE INTO paiduser (userid, paiduntil, paidreminder) ".
1399                "SELECT userid, paiduntil, paidreminder FROM user WHERE paidfeatures='paid'");
1400        try_sql("REPLACE INTO paiduser (userid, paiduntil, paidreminder) ".
1401                "SELECT userid, COALESCE(paiduntil,'0000-00-00'), NULL FROM user WHERE paidfeatures='on'");
1402        do_alter("user",
1403                 "ALTER TABLE user DROP paidfeatures, DROP paiduntil, DROP paidreminder");
1404    }
1405
1406    if (table_relevant("log") && column_type("log", "revttime") eq "")
1407    {
1408        do_alter("log",
1409                 "ALTER TABLE log DROP INDEX eventtime, ADD COLUMN rlogtime INT UNSIGNED NOT NULL DEFAULT 0, ADD COLUMN revttime INT UNSIGNED NOT NULL DEFAULT 0, ADD INDEX rlogtime (ownerid, rlogtime), ADD INDEX revttime (ownerid, revttime), ADD INDEX posterid (posterid, ownerid)");
1410        do_sql("UPDATE log SET revttime=POW(2,31)-1-UNIX_TIMESTAMP(eventtime), rlogtime=POW(2,31)-1-UNIX_TIMESTAMP(logtime) WHERE revttime=0 OR rlogtime=0");
1411       
1412        # related, done at same time:
1413        do_alter("talk",
1414                 "ALTER TABLE talk ADD INDEX datepost (datepost), DROP INDEX posterid, ADD INDEX posterid (posterid, nodetype, datepost)");
1415    }
1416
1417    # move S1 _style ids to userprop table!
1418    if (column_type("user", "lastn_style")) {
1419
1420        # be paranoid and insert these in case they don't exist:
1421        try_sql("INSERT INTO userproplist VALUES (null, 's1_lastn_style', 0, 'Recent View StyleID', 'num', 'The style ID# of the S1 style for the recent entries view.')");
1422        try_sql("INSERT INTO userproplist VALUES (null, 's1_calendar_style', 0, 'Calendar View StyleID', 'num', 'The style ID# of the S1 style for the calendar view.')");
1423        try_sql("INSERT INTO userproplist VALUES (null, 's1_day_style', 0, 'Day View StyleID', 'num', 'The style ID# of the S1 style for the day view.')");
1424        try_sql("INSERT INTO userproplist VALUES (null, 's1_friends_style', 0, 'Friends View StyleID', 'num', 'The style ID# of the S1 style for the friends view.')");
1425       
1426        foreach my $v (qw(lastn day calendar friends)) {
1427            do_sql("INSERT INTO userproplite SELECT u.userid, upl.upropid, u.${v}_style FROM user u, userproplist upl WHERE upl.name='s1_${v}_style'");
1428        }
1429       
1430        do_alter("user",
1431                 "ALTER TABLE user DROP lastn_style, DROP calendar_style, DROP search_style, DROP searchres_style, DROP day_style, DROP friends_style");
1432    }
1433
1434    # add scope columns to proplist tables
1435    if (column_type("userproplist", "scope") eq "") {
1436        do_alter("userproplist",
1437                 "ALTER TABLE userproplist ADD scope ENUM('general', 'local') ".
1438                 "DEFAULT 'general' NOT NULL");
1439    }
1440
1441    if (column_type("logproplist", "scope") eq "") {
1442        do_alter("logproplist",
1443                 "ALTER TABLE logproplist ADD scope ENUM('general', 'local') ".
1444                 "DEFAULT 'general' NOT NULL");
1445    }
1446
1447    if (column_type("talkproplist", "scope") eq "") {
1448        do_alter("talkproplist",
1449                 "ALTER TABLE talkproplist ADD scope ENUM('general', 'local') ".
1450                 "DEFAULT 'general' NOT NULL");
1451    }
1452
1453    if (column_type("priv_list", "scope") eq "") {
1454        do_alter("priv_list",
1455                 "ALTER TABLE priv_list ADD scope ENUM('general', 'local') ".
1456                 "DEFAULT 'general' NOT NULL");
1457    }
1458
1459    # change size of stats table to accomodate meme data, and shrink statcat,
1460    # since it's way too big
1461    if (column_type("stats", "statcat") eq "varchar(100)") {
1462        do_alter("stats",
1463                 "ALTER TABLE stats ".
1464                 "MODIFY statcat VARCHAR(30) NOT NULL, ".
1465                 "MODIFY statkey VARCHAR(150) NOT NULL, ".
1466                 "MODIFY statval INT UNSIGNED NOT NULL, ".
1467                 "DROP INDEX statcat");
1468    }
1469
1470    if (column_type("priv_list", "is_public") eq "") {
1471        do_alter("priv_list",
1472                 "ALTER TABLE priv_list ".
1473                 "ADD is_public ENUM('1', '0') DEFAULT '1' NOT NULL");
1474    }
1475
1476    if (column_type("randomuserset", "rid") eq "") {
1477        do_alter("randomuserset",
1478                 "ALTER TABLE randomuserset DROP PRIMARY KEY, DROP timeupdate, ".
1479                 "ADD rid INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (rid)");
1480    }
1481
1482    # cluster stuff!
1483    if (column_type("meme", "journalid") eq "") {
1484        do_alter("meme",
1485                 "ALTER TABLE meme ADD journalid INT UNSIGNED NOT NULL AFTER ts");
1486    }
1487
1488    if (column_type("topic_map", "jitemid") eq "") {
1489        do_alter("topic_map",
1490                 "ALTER TABLE topic_map DROP INDEX tptopid_2, DROP INDEX itemid, ".
1491                 "ADD journalid INT UNSIGNED NOT NULL AFTER tptopid, ".
1492                 "CHANGE itemid jitemid INT UNSIGNED NOT NULL, ".
1493                 "ADD UNIQUE tptopid_2 (tptopid, journalid, jitemid), ".
1494                 "ADD KEY jitem (journalid, jitemid)");
1495    }
1496
1497    if (column_type("memorable", "jitemid") eq "") {
1498        do_alter("memorable", "ALTER TABLE memorable ".
1499                 "DROP INDEX userid, DROP INDEX itemid, ".
1500                 "CHANGE itemid jitemid INT UNSIGNED NOT NULL, ".
1501                 "ADD journalid INT UNSIGNED NOT NULL AFTER userid, ".
1502                 "ADD UNIQUE uniq (userid, journalid, jitemid), ".
1503                 "ADD KEY item (journalid, jitemid)");
1504    }
1505
1506    if (column_type("user", "clusterid") eq "") {
1507        do_alter("user", "ALTER TABLE user ".
1508                 "ADD clusterid TINYINT UNSIGNED NOT NULL AFTER caps, ".
1509                 "ADD dversion TINYINT UNSIGNED NOT NULL AFTER clusterid, ".
1510                 "ADD INDEX idxcluster (clusterid), ".
1511                 "ADD INDEX idxversion (dversion)");
1512    }
1513
1514    if (column_type("friends", "bgcolor") eq "char(7)") {
1515        do_alter("friends", "ALTER TABLE friends ".
1516                 "MODIFY bgcolor CHAR(8) NOT NULL DEFAULT '16777215', ".
1517                 "MODIFY fgcolor CHAR(8) NOT NULL DEFAULT '0'");
1518        do_sql("UPDATE friends SET ".
1519               "bgcolor=CONV(RIGHT(bgcolor,6),16,10), ".
1520               "fgcolor=CONV(RIGHT(fgcolor,6),16,10)")
1521            unless skip_opt() eq "colorconv";
1522    }
1523
1524    return if skip_opt() eq "colorconv";
1525
1526    if (column_type("friends", "bgcolor") eq "char(8)") {
1527        do_alter("friends", "ALTER TABLE friends ".
1528                 "MODIFY bgcolor MEDIUMINT UNSIGNED NOT NULL DEFAULT 16777215, ".
1529                 "MODIFY fgcolor MEDIUMINT UNSIGNED NOT NULL DEFAULT 0");
1530    }
1531
1532    # add the default encoding field, for recoding older pre-Unicode stuff
1533
1534    if (column_type("user", "oldenc") eq "") {
1535        do_alter("user", "ALTER TABLE user ".
1536                 "ADD oldenc TINYINT DEFAULT 0 NOT NULL, ".
1537                 "MODIFY name VARCHAR(100) NOT NULL"
1538                 );
1539    }
1540
1541    # widen columns to accomodate larger Unicode names
1542    if (column_type("friendgroup", "groupname") eq "varchar(30)") {
1543        do_alter("friendgroup",
1544                 "ALTER TABLE friendgroup ".
1545                 "MODIFY groupname VARCHAR(60) NOT NULL");
1546    }
1547    if (column_type("todo", "statusline") eq "varchar(15)") {
1548        do_alter("todo",
1549                 "ALTER TABLE todo ".
1550                 "MODIFY statusline VARCHAR(40) NOT NULL, " .
1551                 "MODIFY subject VARCHAR(100) NOT NULL, " .
1552                 "MODIFY des VARCHAR(255) NOT NULL");
1553    }
1554    if (column_type("memorable", "des") eq "varchar(60)") {
1555        do_alter("memorable",
1556                 "ALTER TABLE memorable ".
1557                 "MODIFY des VARCHAR(150) NOT NULL");
1558    }
1559    if (column_type("keywords", "keyword") eq "varchar(40) binary") {
1560        do_alter("keywords",
1561                 "ALTER TABLE keywords ".
1562                 "MODIFY keyword VARCHAR(80) BINARY NOT NULL");
1563    }
1564
1565});
1566
1567
15681; # return true;
1569
Note: See TracBrowser for help on using the browser.