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

Revision 1005, 52.0 KB (checked in by bradfitz, 11 years ago)

more lang/text work

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