package journal.schema; import java.util.ArrayList; import java.util.List; import java.util.HashMap; import java.util.Map; // updated for 2019.2 06/23/20 // updated for 2019.1 12/02/19 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); // 2008.1 version.removeAttribute("value"); version.addAttribute("value", Domain.TEXT); addTable(table); table.addIndex("name", true); Table counters = table; // db.nameval table = new Table("db.nameval", counters); addTable(table); // 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); // db.ldap table = new Table("db.ldap"); version = new TableVersion(table, 0); version.addAttribute("name", Domain.KEY); version.addAttribute("host", Domain.TEXT); version.addAttribute("port", Domain.INT); version.addAttribute("ssl", Domain.INT); version.addAttribute("type", Domain.INT); version.addAttribute("pattern", Domain.TEXT); version.addAttribute("baseDn", Domain.TEXT); version.addAttribute("filter", Domain.TEXT); version.addAttribute("scope", Domain.INT); version.addAttribute("bindDn", Domain.TEXT); version.addAttribute("bindPass", Domain.TEXT); version.addAttribute("realm", Domain.TEXT); version.addAttribute("groupBaseDNn", Domain.TEXT); version.addAttribute("groupFilter", Domain.TEXT); version.addAttribute("groupScope", Domain.TEXT); version.addAttribute("options", Domain.TEXT); version.addAttribute("attrUid", Domain.TEXT); version.addAttribute("attrEmail", Domain.TEXT); version.addAttribute("attrName", Domain.TEXT); addTable(table); table.addIndex("name", true); // db.config table = new Table("db.config"); version = new TableVersion(table, 0); // dummy version.addAttribute("serverName", Domain.KEY); version.addAttribute("name", Domain.KEY); version.addAttribute("value", Domain.TEXT); version = new TableVersion(version, 1); // 2010.2 addTable(table); table.addIndex("serverName", true); table.addIndex("name", true); // db.confighist table = new Table("db.confighist"); version = new TableVersion(table, 0); // 2019.2 version.addAttribute("sName", Domain.KEY); version.addAttribute("name", Domain.KEY); version.addAttribute("version", Domain.INT); version.addAttribute("date", Domain.DATE); version.addAttribute("server", Domain.KEY); version.addAttribute("user", Domain.KEY); version.addAttribute("ovalue", Domain.TEXT); version.addAttribute("nvalue", Domain.TEXT); addTable(table); table.addIndex("sName", true); table.addIndex("name", true); table.addIndex("version", true); table.addIndex("date", true); table.addIndex("server", true); // db.upgrades table = new Table("db.upgrades"); version = new TableVersion(table, 0); // 2019.2 version.addAttribute("seq", Domain.INT); version.addAttribute("name", Domain.TEXT); version.addAttribute("state", Domain.INT); version.addAttribute("startdate", Domain.DATE); version.addAttribute("enddate", Domain.DATE); version.addAttribute("info", Domain.TEXT); addTable(table); table.addIndex("seq", true); Table upgrades = table; // db.upgrades.rp table = new Table("db.upgrades.rp", upgrades); addTable(table); // db.scandir table = new Table("db.scandir"); version = new TableVersion(table, 0); // 2019.2 version.addAttribute("lskey", Domain.KEY); version.addAttribute("seq", Domain.KEY); version.addAttribute("file", Domain.KEY); addTable(table); table.addIndex("lskey", true); table.addIndex("seq", true); // db.scanctl table = new Table("db.scanctl"); version = new TableVersion(table, 0); // 2019.2 version.addAttribute("depotPath", Domain.KEY); version.addAttribute("state", Domain.INT); version.addAttribute("seq", Domain.INT); version.addAttribute("dirs", Domain.INT); version.addAttribute("files", Domain.INT); version.addAttribute("zeros", Domain.INT); version.addAttribute("dirserr", Domain.INT); version.addAttribute("pri", Domain.INT); addTable(table); table.addIndex("depotPath", true); // db.server table = new Table("db.server"); version = new TableVersion(table, 0); // 2012.1 version.addAttribute("id", Domain.KEY); version.addAttribute("type", Domain.INT); version.addAttribute("name", Domain.TEXT); version.addAttribute("address", Domain.TEXT); version.addAttribute("services", Domain.INT64); version.addAttribute("desc", Domain.TEXT); version = new TableVersion(version, 1); // 2014.2 version.addAttribute("user", Domain.TEXT); version = new TableVersion(version, 2); // 2015.1 version.addAttribute("externalAddress", Domain.TEXT,4); version = new TableVersion(version, 3); // 2018.2 version.addAttribute("options", Domain.TEXT); version.addAttribute("rplFrom", Domain.TEXT); version.addAttribute("failoverSeen", Domain.TEXT); addTable(table); table.addIndex("id", true); // db.svrview table = new Table("db.svrview"); version = new TableVersion(table, 0); version.addAttribute("serverID", Domain.KEY); version.addAttribute("type", Domain.INT); version.addAttribute("seq", Domain.INT); version.addAttribute("mapFlag", Domain.INT); version.addAttribute("viewFile", Domain.KEY); addTable(table); table.addIndex("serverID", true); table.addIndex("type", true); table.addIndex("seq", true); // db.remote table = new Table("db.remote"); version = new TableVersion(table, 0); // 2015.1 version.addAttribute("id", Domain.KEY); version.addAttribute("owner", Domain.TEXT); version.addAttribute("options", Domain.INT); version.addAttribute("address", Domain.TEXT); version.addAttribute("desc", Domain.TEXT); version.addAttribute("update", Domain.DATE); version.addAttribute("access", Domain.DATE); version.addAttribute("fetch", Domain.INT); version.addAttribute("push", Domain.INT); version = new TableVersion(version, 1); // 2015.2 version.addAttribute("rmtUser", Domain.KEY); addTable(table); table.addIndex("id", true); // db.rmtview table = new Table("db.rmtview"); version = new TableVersion(table, 0); // 2015.1 version.addAttribute("id", Domain.KEY); version.addAttribute("seq", Domain.INT); version.addAttribute("mapFlag", Domain.INT); version.addAttribute("localFile", Domain.KEY); version.addAttribute("remoteFile", Domain.KEY); version = new TableVersion(version, 1); // 2016.1 version.addAttribute("retain", Domain.INT); addTable(table); table.addIndex("id", true); table.addIndex("seq", true); // db.ticket table = new Table("db.ticket"); version = new TableVersion(table, 0); // 2017.2 version.addAttribute("user", Domain.KEY); version.addAttribute("host", Domain.KEY); version.addAttribute("ticket", Domain.TEXT); version.addAttribute("state", Domain.INT); version.addAttribute("token", Domain.TEXT); version.addAttribute("updateDate", Domain.DATE); addTable(table); table.addIndex("user", true); table.addIndex("host", true); Table ticket = table; // db.ticket.rp table = new Table("db.ticket.rp", ticket); addTable(table); // db.stash table = new Table("db.stash"); version = new TableVersion(table, 0); // 2015.1 version.addAttribute("client", Domain.KEY); version.addAttribute("stream", Domain.KEY); version.addAttribute("type", Domain.INT); version.addAttribute("seq", Domain.INT); version.addAttribute("change", Domain.INT); addTable(table); table.addIndex("client", true); table.addIndex("stream", true); table.addIndex("type", true); table.addIndex("seq", true); // db.storage table = new Table("db.storage"); version = new TableVersion(table, 0); // 2019.1 version.addAttribute("file", Domain.KEY); version.addAttribute("rev", Domain.TEXT); version.addAttribute("type", Domain.INT); version.addAttribute("refCount", Domain.INT); version.addAttribute("digest", Domain.OCTET); version.addAttribute("size", Domain.INT); version.addAttribute("serverSize", Domain.INT); version.addAttribute("compCksum", Domain.INT); version.addAttribute("date", Domain.DATE); version = new TableVersion(table, 1); // 2019.2 version.removeAttribute("compCksum"); version.removeAttribute("date"); version.addAttribute("compCksum", Domain.OCTET); version.addAttribute("date", Domain.DATE); addTable(table); table.addIndex("file", true); table.addIndex("rev", true); table.addIndex("type", true); Table storage = table; // db.storagesh table = new Table("db.storagesh", storage); addTable(table); // db.storageg table = new Table("db.storageg"); version = new TableVersion(table, 0); // 2019.1 version.addAttribute("repo", Domain.KEY); version.addAttribute("sha", Domain.KEY); version.addAttribute("type", Domain.INT); version.addAttribute("refCount", Domain.INT); version.addAttribute("date", Domain.DATE); addTable(table); table.addIndex("repo", true); table.addIndex("sha", true); table.addIndex("type", true); // db.user table = new Table("db.user"); version = new TableVersion(table, 0); version.addAttribute("user", Domain.KEY); version.addAttribute("email", Domain.TEXT); version.addAttribute("jobView", Domain.TEXT); 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.addAttribute("password", Domain.TEXT); version = new TableVersion(version, 3); version.addAttribute("strength", Domain.INT); version.addAttribute("ticket", Domain.TEXT); version.addAttribute("endDate", Domain.DATE); version = new TableVersion(version, 4); // 2010.2 version.addAttribute("type", Domain.INT); version.addAttribute("passDate", Domain.DATE); version = new TableVersion(version, 5); // 2012.2 version.addAttribute("passExpire", Domain.DATE); version = new TableVersion(version, 6); // 2013.1 version.addAttribute("attempts", Domain.DATE); version = new TableVersion(version, 7); // 2015.1 version.addAttribute("auth", Domain.INT); addTable(table); table.addIndex("user", true); Table user = table; // db.user.rp table = new Table("db.user.rp", user); addTable(table); // 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("maxResults", Domain.INT); version = new TableVersion(version, 2); version.addAttribute("isSubgroup", Domain.INT, 2); version = new TableVersion(version, 3); version.addAttribute("maxScanRows", Domain.INT); version = new TableVersion(version, 4); version.addAttribute("timeout", Domain.INT); version = new TableVersion(version, 5); version.addAttribute("maxLockTime", Domain.INT, 5); version = new TableVersion(version, 6); version = new TableVersion(version, 7); // 2009.2 version = new TableVersion(version, 8); // 2010.2 version.addAttribute("passwordTimeout", Domain.INT); version = new TableVersion(version, 9); // 2016.1 version.addAttribute("maxOpenFiles", Domain.INT, 6); addTable(table); table.addIndex("user", true); table.addIndex("group", true); // db.groupx table = new Table("db.groupx"); version = new TableVersion(table, 0); // 2015.1 version.addAttribute("group", Domain.KEY); version.addAttribute("ldapConf", Domain.TEXT); version.addAttribute("groupQuery", Domain.TEXT); version.addAttribute("uidAttr", Domain.TEXT); version = new TableVersion(version, 1); // 2016.2 version.removeAttribute("groupQuery"); version.removeAttribute("uidAttr"); version.addAttribute("ldapSearchQuery", Domain.TEXT); version.addAttribute("ldapUserAttribute", Domain.TEXT); version.addAttribute("ldapDNAttribute", Domain.TEXT); addTable(table); 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.property table = new Table("db.property"); version = new TableVersion(table, 0); version.addAttribute("name", Domain.KEY); version.addAttribute("seq", Domain.TEXT); version.addAttribute("type", Domain.INT); version.addAttribute("scope", Domain.TEXT); version.addAttribute("value", Domain.TEXT); version.addAttribute("date", Domain.DATE); version.addAttribute("user", Domain.TEXT); addTable(table); table.addIndex("name", true); table.addIndex("seq", true); table.addIndex("type", true); table.addIndex("scope", true); // db.stream table = new Table("db.stream"); version = new TableVersion(table, 0); // 2010.2 beta stream release version.addAttribute("stream", Domain.KEY); version.addAttribute("parent", Domain.KEY); version.addAttribute("title", Domain.TEXT); version.addAttribute("type", Domain.INT); version.addAttribute("preview", Domain.INT); version = new TableVersion(version, 1); // 2011.1 GA stream release version.addAttribute("change", Domain.INT); version.addAttribute("copyChange", Domain.INT); version.addAttribute("mergeChange", Domain.INT); version.addAttribute("highChange", Domain.INT); version.addAttribute("hash", Domain.INT); version.addAttribute("status", Domain.INT); addTable(table); table.addIndex("stream", 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("updateDate", Domain.DATE); version.addAttribute("options", Domain.INT); version.addAttribute("description", Domain.TEXT); version = new TableVersion(version, 1); version.addAttribute("accessDate", 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); version = new TableVersion(version, 6); // 2012.1 version.addAttribute("serverID", Domain.TEXT); version.addAttribute("partition", Domain.INT); version = new TableVersion(version, 7); // 2017.1 version.removeAttribute("partition"); version.addAttribute("contents", Domain.TEXT); addTable(table); table.addIndex("name", true); // db.excl table = new Table("db.excl"); version = new TableVersion(table,0); // Fake version 0 version.addAttribute("depotFile", Domain.TEXT); version.addAttribute("client", Domain.KEY); version.addAttribute("user", Domain.KEY); version = new TableVersion(version, 1); // 2013.2 addTable(table); table.addIndex("depotFile", true); // db.exclg table = new Table("db.exclg"); version = new TableVersion(table,0); version.addAttribute("repo", Domain.KEY); version.addAttribute("ref", Domain.TEXT); version.addAttribute("file", Domain.KEY); version.addAttribute("lockId", Domain.TEXT); version.addAttribute("user", Domain.KEY); version.addAttribute("created", Domain.TEXT); addTable(table); table.addIndex("repo", true); table.addIndex("ref", true); table.addIndex("file", true); // db.exclgx table = new Table("db.exclgx"); version = new TableVersion(table,0); version.addAttribute("lockId", Domain.TEXT); version.addAttribute("repo", Domain.KEY); version.addAttribute("ref", Domain.TEXT); version.addAttribute("file", Domain.KEY); version.addAttribute("user", Domain.KEY); version.addAttribute("created", Domain.TEXT); addTable(table); table.addIndex("lockId", true); // db.template table = new Table("db.template"); version = new TableVersion(table, 0); // 2010.2 beta streams template version.addAttribute("name", Domain.KEY); version.addAttribute("change", Domain.KEY); version.addAttribute("seq", Domain.KEY); version.addAttribute("parent", Domain.KEY); version.addAttribute("type", Domain.INT); version.addAttribute("path", Domain.INT); version.addAttribute("viewFile", Domain.TEXT); version.addAttribute("depotFile", Domain.TEXT); version = new TableVersion(version, 1); // 2014.1 version.addAttribute( "ccmap", Domain.INT); version = new TableVersion(version, 2); // 2015.2 template change to DmvValue for the changeMap version.removeAttribute("ccmap"); version.addAttribute("changeMap", Domain.TEXT); addTable(table); table.addIndex("name", true); table.addIndex("change", false); table.addIndex("seq", true); // db.templatesx table = new Table("db.templatesx"); version = new TableVersion(table, 0); // 2016.1 version.addAttribute("shelf", Domain.INT); version.addAttribute("name", Domain.KEY); version.addAttribute("seq", Domain.KEY); version.addAttribute("change", Domain.INT); version.addAttribute("parent", Domain.KEY); version.addAttribute("type", Domain.INT); version.addAttribute("path", Domain.INT); version.addAttribute("viewFile", Domain.TEXT); version.addAttribute("depotFile", Domain.TEXT); version.addAttribute("changeMap", Domain.TEXT); version = new TableVersion(version,1); // 2019.1 version.addAttribute("changeAtOpen", Domain.INT); addTable(table); table.addIndex("shelf", true); table.addIndex("name", true); table.addIndex("seq", true); // db.templatewx table = new Table("db.templatewx"); version = new TableVersion(table, 0); // 2016.1 version.addAttribute("client", Domain.KEY); version.addAttribute("name", Domain.KEY); version.addAttribute("seq", Domain.KEY); version.addAttribute("change", Domain.INT); version.addAttribute("parent", Domain.KEY); version.addAttribute("type", Domain.INT); version.addAttribute("path", Domain.INT); version.addAttribute("viewFile", Domain.TEXT); version.addAttribute("depotFile", Domain.TEXT); version.addAttribute("changeMap", Domain.TEXT); version = new TableVersion(version, 1); //2019.1 version.addAttribute("changeAtOpen", Domain.INT); addTable(table); table.addIndex("client", true); table.addIndex("name", false); table.addIndex("seq", 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("viewFile", Domain.KEY); version.addAttribute("depotFile", Domain.KEY); version = new TableVersion(version, 1); addTable(table); table.addIndex("name", true); table.addIndex("seq", true); Table view = table; // db.view.rp table = new Table("db.view.rp", view); addTable(table); // db.review table = new Table("db.review"); version = new TableVersion(table, 0); version.addAttribute("user", Domain.KEY); // schema says 'name', but I am going to cheat here version.addAttribute("seq", Domain.INT); version.addAttribute("mapFlag", Domain.INT); version.addAttribute("depotFile", Domain.KEY); version.addAttribute("type", Domain.INT); version = new TableVersion(version, 1); // 2014.1 update %d wildchars to %%d addTable(table); table.addIndex("user", true); table.addIndex("seq", true); // db.integ table = new Table("db.integ"); version = new TableVersion(table, 0); version.addAttribute("toFile", Domain.KEY); version.addAttribute("fromFile", Domain.KEY); version.addAttribute("startFromRev", Domain.INT); version.addAttribute("endFromRev", Domain.INT); version.addAttribute("toRev", Domain.INT); version.addAttribute("how", Domain.INT); version.addAttribute("committed", Domain.INT); version.addAttribute("resolved", Domain.INT); version.addAttribute("change", Domain.INT); addTable(table); table.addIndex("toFile", true); table.addIndex("fromFile", true); table.addIndex("startFromRev", true); // db.integed table = new Table("db.integed"); version = new TableVersion(table, 0); version.addAttribute("toFile", Domain.KEY); version.addAttribute("fromFile", Domain.KEY); version.addAttribute("startFromRev", Domain.INT); version.addAttribute("endFromRev", Domain.INT); version.addAttribute("startToRev", Domain.INT); version.addAttribute("endToRev", Domain.INT); version.addAttribute("how", Domain.INT); version.addAttribute("change", Domain.INT); addTable(table); table.addIndex("toFile", true); table.addIndex("fromFile", true); table.addIndex("startFromRev", true); table.addIndex("endFromRev", true); table.addIndex("startToRev", true); table.addIndex("endToRev", true); Table integed = table; // db.integtx table = new Table("db.integtx", integed); addTable(table); // db.resolve table = new Table("db.resolve"); version = new TableVersion(table, 0); version.addAttribute("toFile", Domain.KEY); version.addAttribute("fromFile", Domain.KEY); version.addAttribute("startFromRev", Domain.INT); version.addAttribute("endFromRev", Domain.INT); version.addAttribute("startToRev", Domain.INT); version.addAttribute("endToRev", Domain.INT); version.addAttribute("how", Domain.INT); version.addAttribute("resolved", Domain.INT); version.addAttribute("baseFile", Domain.KEY); version.addAttribute("baseRev", Domain.INT); version = new TableVersion(version, 1); // 2011.1 version.removeAttribute("resolved"); version.addAttribute("state", Domain.INT, 7); addTable(table); table.addIndex("toFile", true); table.addIndex("fromFile", true); table.addIndex("startFromRev", true); Table resolve = table; // db.resolvex table = new Table("db.resolvex", resolve); addTable(table); // db.resolveg table = new Table("db.resolveg"); version = new TableVersion(table, 0); version.addAttribute("toFile", Domain.KEY); version.addAttribute("fromFile", Domain.KEY); version.addAttribute("baseSHA", Domain.OCTET); version.addAttribute("wantsSHA", Domain.OCTET); version.addAttribute("how", Domain.INT); version.addAttribute("state", Domain.INT); addTable(table); table.addIndex("toFile", true); table.addIndex("fromFile", true); table.addIndex("baseSHA", true); // db.have table = new Table("db.have"); version = new TableVersion(table, 0); version.addAttribute("clientFile", Domain.KEY); version.addAttribute("depotFile", Domain.KEY); version.addAttribute("haveRev", Domain.INT); version = new TableVersion(version, 1); version.addAttribute("type", Domain.INT); version = new TableVersion(version, 2); // 2006.1 bit-shift version = new TableVersion(version, 3); // 2015.1 version.addAttribute("time", Domain.INT); addTable(table); table.addIndex("clientFile", true); Table have = table; // db.have.pt table = new Table("db.have.pt", have); addTable(table); // db.have.rp table = new Table("db.have.rp", have); addTable(table); // db.haveg table = new Table("db.haveg"); // 2018.1 version = new TableVersion(table, 0); version.addAttribute("repo", Domain.KEY); version.addAttribute("clientFile", Domain.KEY); version.addAttribute("depotFile", Domain.KEY); version.addAttribute("client", Domain.KEY); version.addAttribute("type", Domain.INT); version.addAttribute("action", Domain.INT); version.addAttribute("blobSHA", Domain.OCTET); version.addAttribute("commitSHA", Domain.OCTET); version.addAttribute("flags", Domain.INT); addTable(table); table.addIndex("repo", true); table.addIndex("clientFile", true); // db.haveview table = new Table("db.haveview", view); // 2017.1 addTable(table); // db.label table = new Table("db.label"); version = new TableVersion(table, 0); version.addAttribute("name", Domain.KEY); version.addAttribute("depotFile", Domain.KEY); version.addAttribute("haveRev", Domain.INT); addTable(table); table.addIndex("name", true); table.addIndex("depotFile", true); // db.locks table = new Table("db.locks"); version = new TableVersion(table, 0); version.addAttribute("depotFile", 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); // 2017.1 version.addAttribute("change", Domain.INT); addTable(table); table.addIndex("depotFile", true); table.addIndex("client", true); Table locks = table; // db.locksg table = new Table("db.locksg", locks); addTable(table); // db.archive table = new Table("db.archive"); version = new TableVersion(table, 0); version.addAttribute("lbrFile", Domain.KEY); version.addAttribute("lbrRev", Domain.KEY); version.addAttribute("depotFile", Domain.KEY); version.addAttribute("depotRev", Domain.INT); version.addAttribute("lbrType", Domain.INT); version = new TableVersion(version, 1); addTable(table); table.addIndex("lbrFile", true); table.addIndex("lbrRev", false); table.addIndex("depotFile", true); table.addIndex("depotRev", false); // db.archmap table = new Table("db.archmap"); version = new TableVersion(table, 0); version.addAttribute("lbrFile", Domain.KEY); version.addAttribute("depotFile", Domain.KEY); addTable(table); table.addIndex("lbrFile", true); table.addIndex("depotFile", true); // db.rev table = new Table("db.rev"); version = new TableVersion(table, 0); version.addAttribute("depotFile", Domain.KEY); version.addAttribute("depotRev", 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("lbrFile", Domain.KEY); version.addAttribute("lbrRev", Domain.KEY); version.addAttribute("lbrType", 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); // type bit-shift in 2006.1 version = new TableVersion(version, 7); version.addAttribute("lbrIsLazy", Domain.INT, 10); version = new TableVersion(version, 8); // Action changed in 2009.1 to support p4 move command // nothing changed here ... just for downgrade support. Weird. version = new TableVersion(version, 9); // 2010.2 Introduction of db.revbx table addTable(table); Table rev = table; // need a reference to this table for revdx, revhx, // revcx, revpx table.addIndex("depotFile", true); table.addIndex("depotRev", false); // db.revcx table = new Table("db.revcx"); version = new TableVersion(table, 0); version.addAttribute("change", Domain.INT); version.addAttribute("depotFile", Domain.KEY); version.addAttribute("depotRev", Domain.INT); version.addAttribute("action", Domain.INT8); addTable(table); table.addIndex("change", false); table.addIndex("depotFile", true); // db.revdx table = new Table("db.revdx", rev, false); addTable(table); table.addIndex("depotFile", true); // db.revhx table = new Table("db.revhx", rev, false); addTable(table); table.addIndex("depotFile", true); // db.revpx table = new Table("db.revpx", rev); addTable(table); // db.revsx table = new Table("db.revsx", rev); addTable(table); // db.revbx table = new Table("db.revbx", rev); addTable(table); // db.revsh table = new Table("db.revsh", rev, false); addTable(table); table.addIndex("depotFile", true); table.addIndex("depotRev", true); table.addIndex("type", true); table.addIndex("action", true); table.addIndex("change", true); // db.revux table = new Table("db.revux", rev); addTable(table); // db.revtx (13.1) table = new Table("db.revtx", rev); addTable(table); // db.working table = new Table("db.working"); version = new TableVersion(table, 0); version.addAttribute("clientFile", Domain.KEY); version.addAttribute("depotFile", Domain.KEY); version.addAttribute("client", Domain.KEY); version.addAttribute("user", Domain.KEY); version.addAttribute("haveRev", Domain.INT); version.addAttribute("workRev", 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("isVirtual", 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); // 2006.1 version = new TableVersion(version, 7); version.addAttribute("tampercheck", Domain.INT); version = new TableVersion(version, 8); version.addAttribute("clnttype", Domain.INT); version = new TableVersion(version, 9); version.addAttribute("movedFile", Domain.KEY); version = new TableVersion(version, 10); // 2013.2 version.addAttribute("workingstatus", Domain.INT); addTable(table); table.addIndex("clientFile", true); Table working = table; // db.workingg table = new Table("db.workingg"); version = new TableVersion(table, 0); version.addAttribute("clientFile", Domain.KEY); version.addAttribute("depotFile", Domain.KEY); version.addAttribute("client", Domain.KEY); version.addAttribute("user", Domain.KEY); version.addAttribute("haveRev", Domain.INT); version.addAttribute("workRev", Domain.INT); version.addAttribute("isVirtual", Domain.INT); version.addAttribute("type", Domain.INT); version.addAttribute("action",Domain.TEXT); version.addAttribute("change", Domain.INT); version.addAttribute("modTime", Domain.DATE); version.addAttribute("isLocked",Domain.INT); version.addAttribute("digest", Domain.OCTET); version.addAttribute("size", Domain.INT64); version.addAttribute("traitLot", Domain.INT); version.addAttribute("tampered", Domain.INT); version.addAttribute("clientType", Domain.INT); version.addAttribute("movedFile", Domain.KEY); version.addAttribute("status", Domain.INT); version.addAttribute("blobSHA", Domain.OCTET); version.addAttribute("repo", Domain.KEY); addTable(table); table.addIndex("clientFile", true); // db.workingx table = new Table("db.workingx", working); addTable(table); // 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("valueLength", Domain.INT); version.addAttribute("valueValue", 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("trigger", Domain.KEY); version.addAttribute("mapFlag", Domain.INT); version.addAttribute("depotFile", Domain.KEY); version.addAttribute("action", Domain.TEXT); version = new TableVersion(version, 1); version.removeAttribute("trigger"); version.addAttribute("name", Domain.TEXT, 1); version.addAttribute("trigger", Domain.INT, 4); version = new TableVersion(version, 2); version = new TableVersion(version, 3); // 2014.1 version.addAttribute("triggerDepotFile", Domain.KEY, 4); 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("descKey", Domain.INT); version.addAttribute("client", Domain.KEY); version.addAttribute("user", Domain.KEY); version.addAttribute("date", Domain.DATE); version.addAttribute("status", Domain.INT8); version.addAttribute("description", Domain.TEXT); version = new TableVersion(version, 1); version.addAttribute("root", Domain.KEY); version = new TableVersion(version, 2); version = new TableVersion(version, 3); version.addAttribute("importer", Domain.TEXT); version.addAttribute("identity", Domain.TEXT); version = new TableVersion(version, 4); version.addAttribute("access", Domain.DATE); version = new TableVersion(version,5); // 2018.2 version.addAttribute("update", Domain.DATE); version = new TableVersion(version,6); // 2019.1 version.addAttribute("stream", Domain.KEY); Table change = table; // save for changex addTable(table); table.addIndex("change", false); // db.changex table = new Table("db.changex", change); addTable(table); // db.changeidx table = new Table("db.changeidx"); version = new TableVersion(table, 0); version.addAttribute("identity", Domain.KEY); version.addAttribute("change", Domain.INT); addTable(table); table.addIndex("identity", true); // db.desc table = new Table("db.desc"); version = new TableVersion(table, 0); version.addAttribute("descKey", Domain.INT); version.addAttribute("description", Domain.TEXT); addTable(table); table.addIndex("descKey", false); // db.jnlack table = new Table("db.jnlack"); version = new TableVersion(table, 0); // 2015.1 version.addAttribute("serverId", Domain.KEY); version.addAttribute("lastUpdate", Domain.DATE); version.addAttribute("serverType", Domain.INT); version.addAttribute("persistedJnl", Domain.INT); version.addAttribute("appliedJnl", Domain.INT); version.addAttribute("persistedPos", Domain.INT64); version.addAttribute("appliedPos", Domain.INT64); version.addAttribute("jcflags", Domain.INT); version.addAttribute("isAlive", Domain.INT); version = new TableVersion(version, 1); // 2018.2 version.addAttribute("serverOptions", Domain.INT); version.addAttribute("failoverSeen", Domain.TEXT); addTable(table); table.addIndex("serverId", 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", fix); addTable(table); // db.graphindex table = new Table("db.graphindex"); version = new TableVersion(table,0); version.addAttribute("id", Domain.INT); version.addAttribute("name", Domain.KEY); version.addAttribute("date", Domain.DATE); version.addAttribute("blobSHA", Domain.OCTET); version.addAttribute("commitSHA", Domain.OCTET); version.addAttribute("flags", Domain.INT); addTable(table); table.addIndex("id",true); table.addIndex("name",true); table.addIndex("date",true); table.addIndex("blobSHA",true); table.addIndex("commitSHA",true); version = new TableVersion(version,1); // 2018.1 version.addAttribute("size", Domain.INT); version.addAttribute("type", Domain.INT); version.addAttribute("lfsoid", Domain.TEXT); // db.graphperm table = new Table("db.graphperm"); version = new TableVersion(table,0); // 2016.2 version.addAttribute("name", Domain.KEY); version.addAttribute("repo", Domain.KEY); version.addAttribute("ref", Domain.KEY); version.addAttribute("type", Domain.INT); version.addAttribute("user", Domain.KEY); version.addAttribute("perm", Domain.INT); addTable(table); table.addIndex("name", false); table.addIndex("repo", true); table.addIndex("ref", true); table.addIndex("type", true); table.addIndex("user", true); table.addIndex("perm", true); // 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("isBulk", Domain.INT, 2); addTable(table); table.addIndex("key", true); table.addIndex("attr", true); // db.bodtextcx table = new Table("db.bodtextcx"); version = new TableVersion(table, 0); version.addAttribute("type", Domain.INT); version.addAttribute("key", Domain.KEY); version.addAttribute("change", Domain.INT); version.addAttribute("attr", Domain.INT); version.addAttribute("text", Domain.TEXT); addTable(table); table.addIndex("type", true); table.addIndex("key", true); table.addIndex("change", true); table.addIndex("attr", true); // db.bodtexthx table = new Table("db.bodtexthx"); version = new TableVersion(table, 0); version.addAttribute("type", Domain.INT); version.addAttribute("key", Domain.KEY); version.addAttribute("attr", Domain.INT); version.addAttribute("bulk", Domain.INT); version.addAttribute("text", Domain.TEXT); addTable(table); table.addIndex("type", true); table.addIndex("key", true); table.addIndex("attr", true); // db.bodtextsx table = new Table("db.bodtextsx"); version = new TableVersion(table, 0); version.addAttribute("type", Domain.INT); version.addAttribute("shelf", Domain.INT); version.addAttribute("key", Domain.KEY); version.addAttribute("attr", Domain.INT); version.addAttribute("text", Domain.TEXT); version.addAttribute("workChange", Domain.INT); addTable(table); table.addIndex("type", true); table.addIndex("shelf", true); table.addIndex("key", true); table.addIndex("attr", true); // db.bodtextwx table = new Table("db.bodtextwx"); version = new TableVersion(table, 0); version.addAttribute("type", Domain.INT); version.addAttribute("client", Domain.KEY); version.addAttribute("key", Domain.KEY); version.addAttribute("attr", Domain.INT); version.addAttribute("text", Domain.TEXT); version.addAttribute("workChange", Domain.INT); addTable(table); table.addIndex("type", true); table.addIndex("client", true); 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("depotFile", Domain.KEY); version = new TableVersion(version, 1); version.addAttribute("isGroup", Domain.INT, 1); version = new TableVersion(version, 2); // 99.2 version = new TableVersion(version, 3); // 2002.2 version = new TableVersion(version, 4); // 2016.1 version.removeAttribute("isGroup"); version.addAttribute("type", Domain.INT, 1); // replace isGroup with type version = new TableVersion(version, 5); // 2016.2 version.removeAttribute("type"); version.addAttribute("isGroup", Domain.INT, 1); // replace type with isGroup version.addAttribute("subPath", Domain.KEY); version.addAttribute("update", Domain.DATE); addTable(table); table.addIndex("seq", true); // db.bodresolve table = new Table("db.bodresolve"); version = new TableVersion(table, 0); version.addAttribute("type", Domain.INT8); version.addAttribute("client", Domain.TEXT); version.addAttribute("toKey", Domain.TEXT); version.addAttribute("attr", Domain.INT); version.addAttribute("fromKey", Domain.TEXT); version.addAttribute("fromChange", Domain.INT); version.addAttribute("baseKey", Domain.KEY); version.addAttribute("baseChange", Domain.INT); addTable(table); table.addIndex("type", true); table.addIndex("client", true); table.addIndex("toKey", true); table.addIndex("attr", true); table.addIndex("fromKey", true); table.addIndex("fromChange", 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("function", Domain.TEXT); version.addAttribute("args", Domain.TEXT); version.addAttribute("startDate", Domain.DATE); version.addAttribute("runstate", Domain.INT); version = new TableVersion(version, 1); version.addAttribute("client", Domain.KEY); version.addAttribute("host", Domain.TEXT); version.addAttribute("prog", Domain.TEXT); version = new TableVersion(version, 2); // 2015.1 version.addAttribute("lockInfo", Domain.TEXT); addTable(table); table.addIndex("id", true); // db.object table = new Table("db.object"); version = new TableVersion(table, 0); // 2016.2 version.addAttribute("sha", Domain.OCTET); version.addAttribute("type", Domain.INT); version.addAttribute("dataLength", Domain.INT); version.addAttribute("data", Domain.TEXT); addTable(table); table.addIndex("sha", true); // db.pubkey table = new Table("db.pubkey"); version = new TableVersion(table, 0); // 2016.2 version.addAttribute("user", Domain.KEY); version.addAttribute("scope", Domain.INT); version.addAttribute("key", Domain.KEY); version.addAttribute("digest", Domain.OCTET); version.addAttribute("update", Domain.DATE); addTable(table); table.addIndex("user", true); table.addIndex("scope", true ); // db.sendq table = new Table("db.sendq"); version = new TableVersion(table, 0); // 2014.1 version.addAttribute("taskID", Domain.INT); version.addAttribute("seq", Domain.INT); version.addAttribute("handle", Domain.KEY); version.addAttribute("depotFile", Domain.KEY); version.addAttribute("clientFile", Domain.KEY); version.addAttribute("haveRev", Domain.INT); version.addAttribute("type", Domain.INT); version.addAttribute("modTime", Domain.DATE); version.addAttribute("digest", Domain.OCTET); version.addAttribute("size", Domain.INT); version.addAttribute("lbrFile", Domain.KEY); version.addAttribute("lbrRev", Domain.INT); version.addAttribute("lbrType", Domain.INT); version.addAttribute("flags", Domain.INT); version = new TableVersion(version,1); //2014.2 version.removeAttribute("flags"); version.addAttribute("clientType", Domain.INT); version = new TableVersion(version, 2); // 2016.2 version.addAttribute("flags", Domain.INT, 13); version.addAttribute("depotRev", Domain.INT); version.addAttribute("change", Domain.INT); version.addAttribute( "date", Domain.DATE); version = new TableVersion(version, 3); // 2017.1 version.addAttribute("blobSHA", Domain.OCTET); version = new TableVersion(version, 4); // 2017.2 version.addAttribute("repoSlot", Domain.INT); version.addAttribute("shelveDigest", Domain.OCTET); addTable(table); table.addIndex("taskID", true); Table sendq = table; // db.sendq.pt table = new Table("db.sendq.pt", sendq ); addTable(table); // db.submodule table = new Table("db.submodule"); version = new TableVersion(table, 0); // 2014.1 version.addAttribute("repo", Domain.OCTET); version.addAttribute("path", Domain.KEY); version.addAttribute("subrepo", Domain.OCTET); addTable(table); table.addIndex("repo", true); // db.repo table = new Table("db.repo"); version = new TableVersion(table, 0); // 2016.2 version.addAttribute("repo", Domain.KEY); version.addAttribute("owner", Domain.KEY); version.addAttribute("created", Domain.DATE); version.addAttribute("pushed", Domain.INT); version.addAttribute("forked", Domain.INT); version.addAttribute("desc", Domain.KEY); version.addAttribute("branch", Domain.KEY); version = new TableVersion(version, 1); // 2017.1 version.addAttribute("mirror", Domain.KEY); version = new TableVersion(version, 2); // 2017.2 version.addAttribute("options", Domain.KEY); version.addAttribute("id", Domain.KEY); version = new TableVersion(version, 3); // 2019.2 version.addAttribute("gcmrrserver", Domain.TEXT); addTable(table); table.addIndex("repo", true); // db.repoview table = new Table("db.repoview", view); addTable(table); // db.ref table = new Table( "db.ref"); version = new TableVersion(table, 0); // 2016.2 version.addAttribute("repo", Domain.KEY); version.addAttribute("name", Domain.KEY); version.addAttribute("type", Domain.INT); version.addAttribute("ref", Domain.OCTET); version.addAttribute("symref", Domain.KEY); addTable(table); table.addIndex("repo", true); // db.refhist table = new Table( "db.refhist"); version = new TableVersion(table, 0); // 2016.2 version.addAttribute("repo", Domain.KEY); version.addAttribute("name", Domain.KEY); version.addAttribute("type", Domain.INT); version.addAttribute("action", Domain.INT8); version.addAttribute("date", Domain.DATE); version.addAttribute("user", Domain.KEY); version.addAttribute("ref", Domain.OCTET); version.addAttribute("symref", Domain.KEY); addTable(table); table.addIndex("repo", true); } 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 | |
---|---|---|---|---|---|
#4 | 26591 | Norman Morse |
Updated to support 2019.2 Added souredist to build.xml Checked in latest jars |
||
#3 | 26586 | Norman Morse | journalReader updates for 2019.1 | ||
#2 | 24774 | Norman Morse | Add support for 18.2 schema | ||
#1 | 24773 | Norman Morse |
Moving journalReader from sven's private branch to perforce_software. This is because journalReader is used in the perfsplit test harness, and should be updated over time. Merging //guest/sven_erik_knop/java/JournalReader/... to //guest/perforce_software/journalReader/... |
||
//guest/sven_erik_knop/java/JournalReader/src/journal/schema/Schema.java | |||||
#22 | 23517 | Sven Erik Knop | Added table bodresolve | ||
#21 | 23494 | Sven Erik Knop |
Updated schema (partitially) to 2017.2 Still missing: graph depot schemas some rp (edge server) schemas |
||
#20 | 10702 | Sven Erik Knop | Updated schema for 2014.2 | ||
#19 | 8943 | Sven Erik Knop | Updated Schema for 2014.1 | ||
#18 | 8477 | Sven Erik Knop | Updated schema for 13.2/13.3 | ||
#17 | 8279 | Sven Erik Knop | Finalized schema updates for 2013.1 | ||
#16 | 8277 | Sven Erik Knop | Updated schema to 2013.1 | ||
#15 | 8237 | Sven Erik Knop | Adopted Nick Poole's changes to add PostgresSQL support. | ||
#14 | 8171 | Sven Erik Knop | More missing tables to the schema for 12.2. | ||
#13 | 8170 | Sven Erik Knop | Updated with 2012.2 schema. | ||
#12 | 8135 | Sven Erik Knop | Added new version of resolvex to the schema. | ||
#11 | 8118 | Sven Erik Knop | Added missing db.server to the schema. | ||
#10 | 8113 | Sven Erik Knop |
Updated to 12.1 schema. Added an example rename.ini config file. |
||
#9 | 8027 | Sven Erik Knop |
Moved exceptions to their own package. Enabled new Action FilepathRenamer (not fully tested yet). |
||
#8 | 8013 | Sven Erik Knop |
Rewrite of ClientUserRenamer. Now based on a saner model using a set of Actions instead of lots of state variables. Note that the counter currently does not work and simply returns 0 changes. |
||
#7 | 7991 | Sven Erik Knop | Add revbx (for archived files) to the schema of JournalReader. | ||
#6 | 7985 | Sven Erik Knop | Added 2011.1 Schema and updated the jar file. | ||
#5 | 7874 | Sven Erik Knop | Upgrade to 2010.2 including new JournalNotes. | ||
#4 | 7762 | Sven Erik Knop |
Added resolvex to the Schema. This is used when shelving integrated files. |
||
#3 | 7637 | Sven Erik Knop | Minor schema fix for db.domain for 2002 and earlier Perforce versions. | ||
#2 | 7627 | Sven Erik Knop | Added 9.2+ schema information (shelving) to the JournalReader. | ||
#1 | 7527 | Sven Erik Knop |
JournalReader, now in its proper place. Documentation to follow. |