package com.perforce.common.schema; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.perforce.common.schema.JournalNote.NoteType; public class Schema { private static Map<String, Table> tables = new HashMap<String, Table>(); private static List<String> tableNamesInOrder = new ArrayList<String>(); public static TableVersion GetTableVersion(String name, int version) { Table table = tables.get(name); if (table == null) { return null; } TableVersion tableVersion = table.getVersion(version); return tableVersion; } public static int GetTableIndex(String name) { return tableNamesInOrder.indexOf(name); } static { // list every table // every version // every attribute // then think of a better way Table table; TableVersion version; // Counters // db.counters table = new Table("db.counters"); version = new TableVersion(table, 0); version.addAttribute("name", Domain.KEY); version.addAttribute("value", Domain.INT); version = new TableVersion(version, 1); version.removeAttribute("value"); version.addAttribute("value", Domain.TEXT); addTable(table); table.addIndex("name", true); // db.logger table = new Table("db.logger"); version = new TableVersion(table, 0); version.addAttribute("seq", Domain.INT); version.addAttribute("key", Domain.KEY); version.addAttribute("attr", Domain.KEY); addTable(table); table.addIndex("seq", true); // Client data // db.user table = new Table("db.user"); version = new TableVersion(table, 0); version.addAttribute("user", Domain.KEY); version.addAttribute("email", Domain.TEXT); version.addAttribute("ojobview", Domain.INT); version.addAttribute("update", Domain.DATE); version.addAttribute("access", Domain.DATE); version.addAttribute("fullname", Domain.TEXT); version = new TableVersion(version, 1); version = new TableVersion(version, 2); version.removeAttribute("ojobview"); version.addAttribute("jobview", Domain.TEXT, 2); version.addAttribute("password", Domain.TEXT); version = new TableVersion(version, 3); version.addAttribute("strength", Domain.INT); version.addAttribute("ticket", Domain.TEXT); version.addAttribute("enddate", Domain.DATE); addTable(table); table.addIndex("user", true); // db.group table = new Table("db.group"); version = new TableVersion(table, 0); version.addAttribute("user", Domain.KEY); version.addAttribute("group", Domain.KEY); version = new TableVersion(version, 1); version.addAttribute("maxr", Domain.INT); version = new TableVersion(version, 2); version.addAttribute("type", Domain.INT, 2); version = new TableVersion(version, 3); version.addAttribute("maxs", Domain.INT); version = new TableVersion(version, 4); version.addAttribute("timeout", Domain.INT); version = new TableVersion(version, 5); version.addAttribute("maxl", Domain.INT, 5); version = new TableVersion(version, 6); version = new TableVersion(version, 7); addTable(table); table.addIndex("user", true); table.addIndex("group", true); // db.depot table = new Table("db.depot"); version = new TableVersion(table, 0); version.addAttribute("name", Domain.KEY); version.addAttribute("type", Domain.INT); version.addAttribute("extra", Domain.TEXT); version.addAttribute("map", Domain.TEXT); version = new TableVersion(version, 1); addTable(table); table.addIndex("name", true); // db.domain table = new Table("db.domain"); version = new TableVersion(table, 0); version.addAttribute("name", Domain.KEY); version.addAttribute("type", Domain.INT); version.addAttribute("extra", Domain.TEXT); version.addAttribute("mount", Domain.TEXT); version.addAttribute("owner", Domain.KEY); version.addAttribute("update", Domain.DATE); version.addAttribute("options", Domain.INT); version.addAttribute("desc", Domain.TEXT); version = new TableVersion(version, 1); version.addAttribute("access", Domain.DATE, 6); version = new TableVersion(version, 2); version.addAttribute("mapstate", Domain.INT, 8); version = new TableVersion(version, 3); version.addAttribute("mount2", Domain.TEXT, 4); version.addAttribute("mount3", Domain.TEXT, 5); version = new TableVersion(version, 4); version.removeAttribute("mapstate"); version = new TableVersion(version, 5); version.addAttribute("stream", Domain.TEXT); addTable(table); table.addIndex("name", true); // db.view table = new Table("db.view"); version = new TableVersion(table, 0); version.addAttribute("name", Domain.KEY); version.addAttribute("seq", Domain.INT); version.addAttribute("mapflag", Domain.INT); version.addAttribute("vfile", Domain.KEY); version.addAttribute("dfile", Domain.KEY); version = new TableVersion(version, 1); addTable(table); table.addIndex("name", true); table.addIndex("seq", true); // db.review table = new Table("db.review"); version = new TableVersion(table, 0); version.addAttribute("name", Domain.KEY); version.addAttribute("seq", Domain.INT); version.addAttribute("mapflag", Domain.INT); version.addAttribute("dfile", Domain.KEY); version.addAttribute("type", Domain.INT); version = new TableVersion(version, 1); addTable(table); table.addIndex("name", true); table.addIndex("seq", true); // Files data // db.integ table = new Table("db.integ"); version = new TableVersion(table, 0); version.addAttribute("tfile", Domain.KEY); version.addAttribute("ffile", Domain.KEY); version.addAttribute("sfrev", Domain.INT); version.addAttribute("efrev", Domain.INT); version.addAttribute("tfrev", Domain.INT); version.addAttribute("how", Domain.INT); version.addAttribute("comm", Domain.INT); version.addAttribute("res", Domain.INT); version.addAttribute("change", Domain.INT); addTable(table); table.addIndex("tfile", true); table.addIndex("ffile", true); table.addIndex("sfrev", true); // db.integed table = new Table("db.integed"); version = new TableVersion(table, 0); version.addAttribute("tfile", Domain.KEY); version.addAttribute("ffile", Domain.KEY); version.addAttribute("sfrev", Domain.INT); version.addAttribute("efrev", Domain.INT); version.addAttribute("strev", Domain.INT); version.addAttribute("etrev", Domain.INT); version.addAttribute("how", Domain.INT); version.addAttribute("change", Domain.INT); addTable(table); table.addIndex("tfile", true); table.addIndex("ffile", true); table.addIndex("sfrev", true); table.addIndex("efrev", true); table.addIndex("strev", true); table.addIndex("etrev", true); // db.resolve table = new Table("db.resolve"); version = new TableVersion(table, 0); version.addAttribute("tfile", Domain.KEY); version.addAttribute("ffile", Domain.KEY); version.addAttribute("sfrev", Domain.INT); version.addAttribute("efrev", Domain.INT); version.addAttribute("strev", Domain.INT); version.addAttribute("etrev", Domain.INT); version.addAttribute("how", Domain.INT); version.addAttribute("res", Domain.INT); version.addAttribute("bfile", Domain.KEY); version.addAttribute("brev", Domain.INT); addTable(table); table.addIndex("tfile", true); table.addIndex("ffile", true); table.addIndex("sfrev", true); // db.have table = new Table("db.have"); version = new TableVersion(table, 0); version.addAttribute("cfile", Domain.KEY); version.addAttribute("dfile", Domain.KEY); version.addAttribute("rev", Domain.INT); version = new TableVersion(version, 1); version.addAttribute("type", Domain.INT); version = new TableVersion(version, 2); addTable(table); table.addIndex("cfile", true); // db.label table = new Table("db.label"); version = new TableVersion(table, 0); version.addAttribute("name", Domain.KEY); version.addAttribute("file", Domain.KEY); version.addAttribute("rev", Domain.INT); addTable(table); table.addIndex("name", true); table.addIndex("file", true); // db.locks table = new Table("db.locks"); version = new TableVersion(table, 0); version.addAttribute("dfile", Domain.KEY); version.addAttribute("client", Domain.KEY); version.addAttribute("user", Domain.KEY); version.addAttribute("islocked", Domain.INT); version = new TableVersion(version, 1); version.addAttribute("action", Domain.INT8, 3); version = new TableVersion(version, 2); version.addAttribute("change", Domain.INT ); addTable(table); table.addIndex("dfile", true); table.addIndex("client", true); // db.archive table = new Table("db.archive"); version = new TableVersion(table, 0); version.addAttribute("afile", Domain.KEY); version.addAttribute("arev", Domain.KEY); version.addAttribute("dfile", Domain.KEY); version.addAttribute("rev", Domain.INT); version.addAttribute("atype", Domain.INT); version = new TableVersion(version, 1); addTable(table); table.addIndex("afile", true); table.addIndex("arev", false); table.addIndex("dfile", true); table.addIndex("rev", false); // db.archmap table = new Table("db.archmap"); version = new TableVersion(table, 0); version.addAttribute("afile", Domain.KEY); version.addAttribute("dfile", Domain.KEY); addTable(table); table.addIndex("afile", true); table.addIndex("dfile", true); // db.rev table = new Table("db.rev"); version = new TableVersion(table, 0); version.addAttribute("dfile", Domain.KEY); version.addAttribute("rev", Domain.INT); version.addAttribute("type", Domain.INT); version.addAttribute("ishead", Domain.INT); version.addAttribute("action", Domain.INT8); version.addAttribute("change", Domain.INT); version.addAttribute("date", Domain.DATE); version.addAttribute("afile", Domain.KEY); version.addAttribute("arev", Domain.KEY); version.addAttribute("atype", Domain.INT); version = new TableVersion(version, 1); version.addAttribute("digest", Domain.OCTET, 7); version = new TableVersion(version, 2); version.removeAttribute("ishead"); version = new TableVersion(version, 3); version.addAttribute("modtime", Domain.DATE, 6); version = new TableVersion(version, 4); version.addAttribute("traitlot", Domain.INT, 8); version = new TableVersion(version, 5); version.addAttribute("size", Domain.INT64, 8); version = new TableVersion(version, 6); version = new TableVersion(version, 7); version.addAttribute("islazy", Domain.INT, 10); version = new TableVersion(version, 8); // nothing changed here ... just for downgrade support. Weird. addTable(table); Table rev = table; // need a reference to this table for revdx, revhx, revcx, revpx table.addIndex("dfile", true); table.addIndex("rev", false); // db.revcx table = new Table("db.revcx"); version = new TableVersion(table, 0); version.addAttribute("change", Domain.INT); version.addAttribute("dfile", Domain.KEY); version.addAttribute("rev", Domain.INT); version.addAttribute("action", Domain.INT8); addTable(table); table.addIndex("change", false); table.addIndex("dfile", true); // TODO: need to add missing versions, at least 4 in total // db.revdx table = new Table("db.revdx"); for (int i = 0; i < 9; i++) { version = new TableVersion(table, i); version.addAttributes(rev.getVersion(i)); } addTable(table); table.addIndex("dfile", true); // db.revhx table = new Table("db.revhx"); for (int i = 0; i < 9; i++) { version = new TableVersion(table, i); version.addAttributes(rev.getVersion(i)); } addTable(table); table.addIndex("dfile", true); // db.revpx table = new Table("db.revpx"); for (int i = 0; i < 9; i++) { version = new TableVersion(table, i); version.addAttributes(rev.getVersion(i)); } addTable(table); table.addIndex("dfile", true); table.addIndex("rev", false); // db.revsx table = new Table("db.revsx"); for (int i = 0; i < 9; i++) { version = new TableVersion(table, i); version.addAttributes(rev.getVersion(i)); } addTable(table); table.addIndex("dfile", true); table.addIndex("rev", false); // db.revsh table = new Table("db.revsh"); for (int i = 0; i < 9; i++) { version = new TableVersion(table, i); version.addAttributes(rev.getVersion(i)); } addTable(table); table.addIndex("dfile", true); table.addIndex("rev", false); // db.working table = new Table("db.working"); version = new TableVersion(table, 0); version.addAttribute("cfile", Domain.KEY); version.addAttribute("dfile", Domain.KEY); version.addAttribute("client", Domain.KEY); version.addAttribute("user", Domain.KEY); version.addAttribute("hrev", Domain.INT); version.addAttribute("wrev", Domain.INT); version.addAttribute("type", Domain.INT); version.addAttribute("action", Domain.INT8); version.addAttribute("change", Domain.INT); version.addAttribute("modtime", Domain.DATE); version.addAttribute("islocked", Domain.INT); version = new TableVersion(version, 1); version = new TableVersion(version, 2); version.addAttribute("virtual", Domain.INT, 6); version = new TableVersion(version, 3); version.addAttribute("digest", Domain.OCTET); version = new TableVersion(version, 4); version.addAttribute("traitlot", Domain.INT); version = new TableVersion(version, 5); version.addAttribute("size", Domain.INT64, 13); version = new TableVersion(version, 6); version = new TableVersion(version, 7); version.addAttribute("tampered", Domain.INT); version = new TableVersion(version, 8); version.addAttribute("ctype", Domain.INT); version = new TableVersion(version, 9); version.addAttribute("mfile", Domain.KEY); addTable(table); table.addIndex("cfile", true); Table working = table; // db.workingx table = new Table("db.workingx"); for (int i = 0; i < 10; i++) { version = new TableVersion(table, i); version.addAttributes(working.getVersion(i)); } addTable(table); table.addIndex("cfile", true); // db.traits table = new Table("db.traits"); version = new TableVersion(table, 0); version.addAttribute("traitlot", Domain.INT); version.addAttribute("name", Domain.KEY); version.addAttribute("type", Domain.INT); version.addAttribute("len", Domain.INT); version.addAttribute("value", Domain.OCTETS); addTable(table); table.addIndex("traitlot", true); table.addIndex("name", true); // db.trigger table = new Table("db.trigger"); version = new TableVersion(table, 0); version.addAttribute("seq", Domain.INT); version.addAttribute("name", Domain.KEY); version.addAttribute("mapflag", Domain.INT); version.addAttribute("dfile", Domain.KEY); version.addAttribute("action", Domain.TEXT); version = new TableVersion(version, 1); version.addAttribute("trigger", Domain.INT, 4); version = new TableVersion(version, 2); addTable(table); table.addIndex("seq", true); // Change data // db.change table = new Table("db.change"); version = new TableVersion(table, 0); version.addAttribute("change", Domain.INT); version.addAttribute("key", Domain.INT); version.addAttribute("client", Domain.KEY); version.addAttribute("user", Domain.KEY); version.addAttribute("date", Domain.DATE); version.addAttribute("status", Domain.INT8); version.addAttribute("desc", Domain.TEXT); version = new TableVersion(version, 1); version.addAttribute("root", Domain.KEY); Table change = table; // save for changex addTable(table); table.addIndex("change", false); // db.changex table = new Table("db.changex"); version = new TableVersion(table, 0); version.addAttributes(change.getVersion(0)); version = new TableVersion(table, 1); version.addAttributes(change.getVersion(1)); addTable(table); table.addIndex("change", false); // db.desc table = new Table("db.desc"); version = new TableVersion(table, 0); version.addAttribute("key", Domain.INT); version.addAttribute("desc", Domain.TEXT); addTable(table); table.addIndex("key", false); // db.job table = new Table("db.job"); version = new TableVersion(table, 0); version.addAttribute("job", Domain.KEY); version.addAttribute("user", Domain.KEY); version.addAttribute("date", Domain.DATE); version.addAttribute("status", Domain.INT8); version.addAttribute("desc", Domain.TEXT); Table job = table; addTable(table); table.addIndex("job", true); // db.jobpend table = new Table("db.jobpend"); version = new TableVersion(table, 0); version.addAttributes(job.getVersion(0)); addTable(table); table.addIndex("job", true); table.addIndex("user", true); // db.jobdesc table = new Table("db.jobdesc"); version = new TableVersion(table, 0); version.addAttribute("job", Domain.INT); version.addAttribute("desc", Domain.TEXT); addTable(table); table.addIndex("job", true); // db.fix table = new Table("db.fix"); version = new TableVersion(table, 0); version.addAttribute("job", Domain.KEY); version.addAttribute("change", Domain.INT); version.addAttribute("date", Domain.DATE); version.addAttribute("stat992", Domain.INT8); version.addAttribute("client", Domain.KEY); version.addAttribute("user", Domain.KEY); version = new TableVersion(version, 1); version.removeAttribute("stat992"); version.addAttribute("status", Domain.KEY); Table fix = table; addTable(table); table.addIndex("job", true); table.addIndex("change", false); // db.fixrev table = new Table("db.fixrev"); version = new TableVersion(table, 0); version.addAttributes(fix.getVersion(0)); version = new TableVersion(table, 1); version.addAttributes(fix.getVersion(1)); addTable(table); table.addIndex("change", false); table.addIndex("job", true); // job bodies // db.boddate table = new Table("db.boddate"); version = new TableVersion(table, 0); version.addAttribute("key", Domain.KEY); version.addAttribute("attr", Domain.INT); version.addAttribute("date", Domain.DATE); addTable(table); table.addIndex("key", true); table.addIndex("attr", true); // db.bodtext table = new Table("db.bodtext"); version = new TableVersion(table, 0); version.addAttribute("key", Domain.KEY); version.addAttribute("attr", Domain.INT); version.addAttribute("text", Domain.TEXT); version = new TableVersion(version, 1); version.addAttribute("bulk", Domain.INT, 2); addTable(table); table.addIndex("key", true); table.addIndex("attr", true); // db.ixdate table = new Table("db.ixdate"); version = new TableVersion(table, 0); version.addAttribute("date", Domain.DATE); version.addAttribute("attr", Domain.INT); version.addAttribute("value", Domain.KEY); addTable(table); table.addIndex("date", true); table.addIndex("attr", true); table.addIndex("value", true); // db.ixtext table = new Table("db.ixtext"); version = new TableVersion(table, 0); version.addAttribute("word", Domain.KEY); version.addAttribute("attr", Domain.INT); version.addAttribute("value", Domain.KEY); addTable(table); table.addIndex("word", true); table.addIndex("attr", true); table.addIndex("value", true); // db.protect table = new Table("db.protect"); version = new TableVersion(table, 0); version.addAttribute("seq", Domain.INT); version.addAttribute("user", Domain.KEY); version.addAttribute("host", Domain.KEY); version.addAttribute("perm", Domain.INT8); version.addAttribute("mapflag", Domain.INT); version.addAttribute("dfile", Domain.KEY); version = new TableVersion(version, 1); version.addAttribute("group", Domain.INT, 1); version = new TableVersion(version, 2); version = new TableVersion(version, 3); version = new TableVersion(version, 4); addTable(table); table.addIndex("seq", true); // db.message table = new Table("db.message"); version = new TableVersion(table, 0); version.addAttribute("lang", Domain.KEY); version.addAttribute("id", Domain.INT); version.addAttribute("msg", Domain.TEXT); addTable(table); table.addIndex("lang", true); table.addIndex("id", true); // db.monitor table = new Table("db.monitor"); version = new TableVersion(table, 0); version.addAttribute("id", Domain.INT); version.addAttribute("user", Domain.KEY); version.addAttribute("func", Domain.TEXT); version.addAttribute("args", Domain.TEXT); version.addAttribute("start", Domain.DATE); version.addAttribute("runstate", Domain.INT); version = new TableVersion(version, 1); version.addAttribute("client", Domain.KEY); version.addAttribute("host", Domain.TEXT); version.addAttribute("app", Domain.TEXT); addTable(table); table.addIndex("id", true); // note CHECKPOINT_HEADER // @nx@ 0 1347379053 @30@ 2 0 0 0 0 @.@ @journal@ @@ @@ @@ table = new Table(NoteType.CKP_HEADER.name()); version = new TableVersion(table, 0); version.addAttribute("date", Domain.DATE); version.addAttribute("schema", Domain.TEXT); version.addAttribute("mode", Domain.INT); version.addAttribute("int1", Domain.INT); version.addAttribute("int2", Domain.INT); version.addAttribute("int3", Domain.INT); version.addAttribute("int4", Domain.INT); version.addAttribute("root", Domain.TEXT); version.addAttribute("jnlfile", Domain.TEXT); version.addAttribute("str3", Domain.TEXT); version.addAttribute("str4", Domain.TEXT); version.addAttribute("str5", Domain.TEXT); addTable(table); // note JOURNAL_HEADER table = new Table(NoteType.JNL_HEADER.name()); version = new TableVersion(table, 0); version.addAttribute("date", Domain.DATE); version.addAttribute("schema", Domain.TEXT); version.addAttribute("mode", Domain.INT); version.addAttribute("flag", Domain.INT); version.addAttribute("int1", Domain.INT); version.addAttribute("int2", Domain.INT); version.addAttribute("int3", Domain.INT); version.addAttribute("str1", Domain.TEXT); version.addAttribute("str2", Domain.TEXT); version.addAttribute("str3", Domain.TEXT); version.addAttribute("str4", Domain.TEXT); version.addAttribute("str5", Domain.TEXT); addTable(table); } private static void addTable(final Table table) { tableNamesInOrder.add(table.getName()); tables.put(table.getName(), table); } private static void dumpSchema() { for (String name : tableNamesInOrder) { Table table = tables.get(name); System.out.println(table); } } public static void main(final String[] args) { if (args.length == 0) { dumpSchema(); } else { for (String arg : args) { Table table = tables.get(arg); if (table != null) { System.out.println(table); } else { System.out.println("Table " + arg + " unknown."); } } } } }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 10152 | alan_petersen |
Populate //guest/alan_petersen/p4convert/... from //guest/perforce_software/p4convert/.... |
||
//guest/perforce_software/p4convert/src/com/perforce/common/schema/Schema.java | |||||
#1 | 9807 | Paul Allen | Initial import of p4-convert (from change 894340) |