You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gump.apache.org by le...@apache.org on 2005/07/05 14:06:29 UTC

svn commit: r209265 - in /gump/branches/Gump3: gumpdb/src/sql/gump3-database-definition.sql gumpdb/src/sql/gump3-old-sampledata.sql gumpdb/src/sql/gump3-sampledata.sql pygump/python/gump/plugins/dynagumper.py

Author: leosimons
Date: Tue Jul  5 05:06:27 2005
New Revision: 209265

URL: http://svn.apache.org/viewcvs?rev=209265&view=rev
Log:
Make dynagumper (the gump3 plugin that pushes data into the dynagump database) push out most of the data (a few TODOs left), update the database definition to be a little simpler and a little more consistent, document the database schema, split out the sample data dump from the definitions, and add some gump-generated sample data.

 * pygump/python/gump/plugins/dynagumper.py: write a whole bunch of store-the-model-inside-the-database. This plugin now contains most of the logic/intelligence that was so far implicit in the database schema (I hope).

 * gumpdb/src/sql/gump3-database-definition.sql,
   gumpdb/src/sql/gump3-sampledata.sql,
   gumpdb/src/sql/gump3-old-sampledata.sql: splitting off the sample data into seperate files, and adding new gump-generated sample data.

 * gumpdb/src/sql/gump3-database-definition.sql: so far gump doesn't actually have any 'runtime environment package management' so I'm removing that from the schema for now even if its a good idea. Added a bunch of documentation on what things are. Gave some variables (like all the ids) more space. Got rid of the 'descriptor' term all-round and just use 'id' everywhere. Added some useful keys. Added a 'causes' table which identifies why a project is stalled (still some work to do here, for example when the module is a cause). And other small tweaks.

Added:
    gump/branches/Gump3/gumpdb/src/sql/gump3-old-sampledata.sql
      - copied, changed from r209092, gump/branches/Gump3/gumpdb/src/sql/gump3-database-definition.sql
    gump/branches/Gump3/gumpdb/src/sql/gump3-sampledata.sql
Modified:
    gump/branches/Gump3/gumpdb/src/sql/gump3-database-definition.sql
    gump/branches/Gump3/pygump/python/gump/plugins/dynagumper.py

Modified: gump/branches/Gump3/gumpdb/src/sql/gump3-database-definition.sql
URL: http://svn.apache.org/viewcvs/gump/branches/Gump3/gumpdb/src/sql/gump3-database-definition.sql?rev=209265&r1=209264&r2=209265&view=diff
==============================================================================
--- gump/branches/Gump3/gumpdb/src/sql/gump3-database-definition.sql (original)
+++ gump/branches/Gump3/gumpdb/src/sql/gump3-database-definition.sql Tue Jul  5 05:06:27 2005
@@ -1,228 +1,199 @@
-# CocoaMySQL dump
-# Version 0.5
-# http://cocoamysql.sourceforge.net
-#
-# Host: localhost (MySQL 4.1.7-standard)
-# Database: gump
-# Generation Time: 2004-11-30 22:22:01 -0800
-# ************************************************************
+# Copyright 2004-2005 The Apache Software Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+#     http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# GUMP3 Database model for Dynagump
+#
+#
+# This model provides for versioned storage of the key bits of the gump
+# metadata model and the key information of its build results. Information
+# can be stored from multiple workspaces on multiple hosts across multiple
+# runs.
+#
+# Because of the versioning characteristics, some relationships may be
+# a little different from what you expect: certain aspects of the gump
+# metadata change over time, and hence where the rest of the gump codebase
+# may assume, for example, that a particular "dependency" is constant, here
+# we take into account that dependencies between projects change over time,
+# hence we model dependencies between "project_version" rows and not
+# between "projects".
+#
+# This database model has a diagram (probably somewhat outdated) living at
+#
+#  https://svn.apache.org/repos/asf/gump/trunk/src/xdocs/gump.pdf
+#
+# (page 6) that shows the relationships between the different tables.
+#
+#
+# What is a little different in this database scheme is that we are not
+# using simple integers as ids, but rather we have
+#
+#  `id` varchar(255) NOT NULL default '',
+#
+# in most of the tables. An id is (supposed to be) a sort-of URI (see the
+# relevant RFC) that is essentially globally (not per-database,
+# per-entire-universe) unique and human readable. For example,
+#
+#    gump:vmgump.apache.org:public:200507042114:xml-xerces
+#
+# can be understood to mean "the build of xml-xerces om vmgump.apache.org
+# as part of the 'public' workspace that started on 2005-07-04 21:14".
+#
+# This URI scheme is currently not fully defined, nor do we put the "gump:"
+# prefix in the database. For now, simply ensuring that all "id" fields
+# across the entire database (so not just within a table) are unique will
+# suffice.
 
-# Dump of table builds
-# ------------------------------------------------------------
+# NOTE: For now I have taken out the Packages table because that concept is not
+# yet supported anywhere else within Gump3.
 
-DROP TABLE IF EXISTS `builds`;
 
+# A "build" is the activity of "building" a project defined in the gump
+# metadata at some point in time on some machine as part of some gump run
+DROP TABLE IF EXISTS `builds`;
 CREATE TABLE `builds` (
-  `id` varchar(96) NOT NULL default '',
-  `run` varchar(64) NOT NULL default '',
-  `project_version` varchar(64) NOT NULL default '',
+  `id` varchar(255) NOT NULL default '',
+  `run_id` varchar(255) NOT NULL default '',
+  `project_version_id` varchar(255) NOT NULL default '',
   `start_time` datetime NOT NULL default '0000-00-00 00:00:00',
   `end_time` datetime NOT NULL default '0000-00-00 00:00:00',
-  `result` int(1) NOT NULL default '0',
+  `result` int(2) NOT NULL default '0',
   `log` text,
   PRIMARY KEY  (`id`),
-  KEY `run` (`run`)
-) ENGINE=MyISAM;
-
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test1.blah.com:main:200411080000:0","test1.blah.com:main:200411080000","test1.blah.com:main:200411080000:project1","2004-11-08 00:01:03","2004-11-08 00:08:32","0",NULL);
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test1.blah.com:main:200411080100:0","test1.blah.com:main:200411080100","test1.blah.com:main:200411080100:project1","2004-11-08 01:01:03","2004-11-08 01:08:32","0",NULL);
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test1.blah.com:main:200411080000:1","test1.blah.com:main:200411080000","test1.blah.com:main:200411080000:project2","2004-11-08 00:10:09","2004-11-08 00:14:22","1",NULL);
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test1.blah.com:main:200411080100:1","test1.blah.com:main:200411080100","test1.blah.com:main:200411080100:project2","2004-11-08 01:10:09","2004-11-08 01:14:22","0",NULL);
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test2.blah.com:main:200411080000:0","test2.blah.com:main:200411080000","test2.blah.com:main:200411080000:project1","2004-11-08 00:01:03","2004-11-08 00:08:32","1",NULL);
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test2.blah.com:main:200411080100:0","test2.blah.com:main:200411080100","test2.blah.com:main:200411080100:project1","2004-11-08 01:01:03","2004-11-08 01:08:32","0",NULL);
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test2.blah.com:main:200411080000:1","test2.blah.com:main:200411080000","test2.blah.com:main:200411080000:project2","2004-11-08 00:10:09","2004-11-08 00:14:22","2",NULL);
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test2.blah.com:main:200411080100:1","test2.blah.com:main:200411080100","test2.blah.com:main:200411080100:project2","2004-11-08 01:10:09","2004-11-08 01:14:22","0",NULL);
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test1.blah.com:main:200411080000:2","test1.blah.com:main:200411080000","test1.blah.com:main:200411080000:project3","2004-11-08 00:15:29","2004-11-08 00:15:32","2",NULL);
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test1.blah.com:main:200411080100:2","test1.blah.com:main:200411080100","test1.blah.com:main:200411080100:project3","2004-11-08 01:15:30","2004-11-08 01:15:37","1",NULL);
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test2.blah.com:main:200411080000:2","test2.blah.com:main:200411080000","test2.blah.com:main:200411080000:project3","2004-11-08 00:15:29","2004-11-08 00:15:33","2",NULL);
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test2.blah.com:main:200411080100:2","test2.blah.com:main:200411080100","test2.blah.com:main:200411080100:project3","2004-11-08 01:15:39","2004-11-08 01:15:43","0",NULL);
-
-
-# Dump of table hosts
-# ------------------------------------------------------------
+  KEY `run_id` (`run_id`),
+  KEY `project_version_id` (`project_version_id`),
+  KEY `result` (`result`)
+);
+
+
+# A "cause" is a pointer to the object (project_version, module, ...) that
+# made a "build" end up with a particular "result".
+DROP TABLE IF EXISTS `causes`;
+CREATE TABLE `causes` (
+  `build_id` varchar(255) NOT NULL default '',
+  `cause_id` varchar(255) NOT NULL default '',
+  `cause_table` varchar(32) NOT NULL default 'project_versions',
+  KEY `build_id` (`build_id`),
+  KEY `cause_id` (`cause_id`)
+);
 
+# A "host" is a physical machine on which gump runs
 DROP TABLE IF EXISTS `hosts`;
-
 CREATE TABLE `hosts` (
-  `address` varchar(32) NOT NULL default '',
+  `address` varchar(255) NOT NULL default '',
   `description` text,
   `cpu_arch` varchar(8) NOT NULL default 'x86',
   `cpu_number` int(2) unsigned NOT NULL default '1',
   `cpu_speed_Mhz` int(8) unsigned default NULL,
   `memory_Mb` int(8) unsigned default NULL,
   `disk_Gb` int(8) unsigned default NULL,
-  `name` varchar(16) NOT NULL default '',
+  `name` varchar(32) NOT NULL default '',
   PRIMARY KEY  (`address`)
-) ENGINE=MyISAM;
-
-INSERT INTO `hosts` (`address`,`description`,`cpu_arch`,`cpu_number`,`cpu_speed_Mhz`,`memory_Mb`,`disk_Gb`,`name`) VALUES ("test1.blah.com","debug host 1","x86","1",NULL,NULL,NULL,"Test 1");
-INSERT INTO `hosts` (`address`,`description`,`cpu_arch`,`cpu_number`,`cpu_speed_Mhz`,`memory_Mb`,`disk_Gb`,`name`) VALUES ("test2.blah.com","debug host 2","x86","1",NULL,NULL,NULL,"Test 2");
-
+);
 
-# Dump of table modules
-# ------------------------------------------------------------
 
+# A "module" corresponds directly to the concept of
+# the "module" in gump metadata. We do not version
+# modules (even though perhaps we could), primarily
+# because they are kind-of boring.
 DROP TABLE IF EXISTS `modules`;
-
 CREATE TABLE `modules` (
+  `id` varchar(255) NOT NULL default '',
   `name` varchar(32) NOT NULL default '',
   `description` tinytext,
-  `descriptor` varchar(128) NOT NULL default '',
-  PRIMARY KEY  (`name`)
-) ENGINE=MyISAM;
-
-INSERT INTO `modules` (`name`,`description`,`descriptor`) VALUES ("module1",NULL,"http://blah.com/module1/gump.xml");
-INSERT INTO `modules` (`name`,`description`,`descriptor`) VALUES ("module2",NULL,"http://blah.com/module2/gump.xml");
-
-
-# Dump of table packages
-# ------------------------------------------------------------
-
-DROP TABLE IF EXISTS `packages`;
-
-CREATE TABLE `packages` (
-  `uri` varchar(64) NOT NULL default '',
-  `version` varchar(16) NOT NULL default '1.0',
-  `location` varchar(64) NOT NULL default ':',
-  `name` varchar(16) NOT NULL default ''
-) ENGINE=MyISAM;
-
-
+  PRIMARY KEY  (`id`)
+);
 
-# Dump of table project_dependencies
-# ------------------------------------------------------------
 
+# A "project_dependency" is a link between a project_version
+# and one of it prerequisite project_versions.
 DROP TABLE IF EXISTS `project_dependencies`;
-
 CREATE TABLE `project_dependencies` (
-  `dependee` varchar(64) NOT NULL default '',
-  `dependant` varchar(64) NOT NULL default '',
+  `dependee` varchar(255) NOT NULL default '',
+  `dependant` varchar(255) NOT NULL default '',
   KEY `dependee` (`dependee`),
   KEY `dependant` (`dependant`)
-) ENGINE=MyISAM;
-
-INSERT INTO `project_dependencies` (`dependee`,`dependant`) VALUES ("test1.blah.com:main:200411080000:project1","test1.blah.com:main:200411080000:project2");
-INSERT INTO `project_dependencies` (`dependee`,`dependant`) VALUES ("test1.blah.com:main:200411080000:project3","test1.blah.com:main:200411080000:project2");
-INSERT INTO `project_dependencies` (`dependee`,`dependant`) VALUES ("test1.blah.com:main:200411080000:project3","test1.blah.com:main:200411080000:project1");
-INSERT INTO `project_dependencies` (`dependee`,`dependant`) VALUES ("test2.blah.com:main:200411080000:project2","test2.blah.com:main:200411080000:project1");
-INSERT INTO `project_dependencies` (`dependee`,`dependant`) VALUES ("test2.blah.com:main:200411080000:project3","test2.blah.com:main:200411080000:project2");
-INSERT INTO `project_dependencies` (`dependee`,`dependant`) VALUES ("test2.blah.com:main:200411080000:project3","test2.blah.com:main:200411080000:project1");
-INSERT INTO `project_dependencies` (`dependee`,`dependant`) VALUES ("test1.blah.com:main:200411080100:project2","test1.blah.com:main:200411080100:project1");
-INSERT INTO `project_dependencies` (`dependee`,`dependant`) VALUES ("test1.blah.com:main:200411080100:project3","test1.blah.com:main:200411080100:project2");
-INSERT INTO `project_dependencies` (`dependee`,`dependant`) VALUES ("test1.blah.com:main:200411080100:project3","test1.blah.com:main:200411080100:project1");
-INSERT INTO `project_dependencies` (`dependee`,`dependant`) VALUES ("test2.blah.com:main:200411080100:project2","test2.blah.com:main:200411080100:project1");
-INSERT INTO `project_dependencies` (`dependee`,`dependant`) VALUES ("test2.blah.com:main:200411080100:project3","test2.blah.com:main:200411080100:project2");
-INSERT INTO `project_dependencies` (`dependee`,`dependant`) VALUES ("test2.blah.com:main:200411080100:project3","test2.blah.com:main:200411080100:project1");
+);
 
 
-# Dump of table project_versions
-# ------------------------------------------------------------
-
+# A "project_version" is a project at a particular point
+# in time as part of a particular gump run on a particular
+# machine. Its related to exactly one "project".
 DROP TABLE IF EXISTS `project_versions`;
-
 CREATE TABLE `project_versions` (
-  `id` varchar(64) NOT NULL default '',
-  `project` varchar(64) NOT NULL default ''
-) ENGINE=MyISAM;
-
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test1.blah.com:main:200411080000:project1","project1");
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test1.blah.com:main:200411080000:project2","project2");
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test1.blah.com:main:200411080000:project3","project3");
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test1.blah.com:main:200411080100:project1","project1");
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test1.blah.com:main:200411080100:project3","project3");
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test1.blah.com:main:200411080100:project2","project2");
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test2.blah.com:main:200411080000:project1","project1");
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test2.blah.com:main:200411080000:project2","project2");
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test2.blah.com:main:200411080000:project3","project3");
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test2.blah.com:main:200411080100:project1","project1");
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test2.blah.com:main:200411080100:project2","project2");
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test2.blah.com:main:200411080100:project3","project3");
+  `id` varchar(255) NOT NULL default '',
+  `project_id` varchar(255) NOT NULL default '',
+  PRIMARY KEY (`id`)
+);
 
 
-# Dump of table projects
-# ------------------------------------------------------------
-
+# A "project" corresponds directly to the concept of
+# the "project" in gump metadata, except that some of
+# the characteristics of a project (eg its dependencies)
+# are versioned and hence pushed into the project_versions
+# table
 DROP TABLE IF EXISTS `projects`;
-
 CREATE TABLE `projects` (
-  `name` varchar(32) NOT NULL default '',
+  `id` varchar(255) default NULL,
+  `name` varchar(255) NOT NULL default '',
   `description` tinytext,
-  `module` varchar(32) NOT NULL default '',
-  `descriptor` varchar(128) default NULL,
-  PRIMARY KEY  (`name`),
-  KEY `module` (`module`)
-) ENGINE=MyISAM;
-
-INSERT INTO `projects` (`name`,`description`,`module`,`descriptor`) VALUES ("project1","The first project","module1",NULL);
-INSERT INTO `projects` (`name`,`description`,`module`,`descriptor`) VALUES ("project2","The second project","module1",NULL);
-INSERT INTO `projects` (`name`,`description`,`module`,`descriptor`) VALUES ("project3","The third project","module2",NULL);
-
+  `module_id` varchar(255) NOT NULL default '',
+  PRIMARY KEY  (`id`),
+  KEY `name` (`name`),
+  KEY `module_id` (`module_id`)
+);
 
-# Dump of table results
-# ------------------------------------------------------------
 
+# A "result" is basically a label to put on a certain
+# kind of build result. This table connects a name and
+# description to the "result" field of the "builds"
+# table
 DROP TABLE IF EXISTS `results`;
-
 CREATE TABLE `results` (
-  `id` int(1) NOT NULL default '0',
-  `name` varchar(16) NOT NULL default '',
+  `id` int(2) NOT NULL default '0',
+  `name` varchar(32) NOT NULL default '',
   `description` text,
   PRIMARY KEY  (`id`)
-) ENGINE=MyISAM;
-
+);
 INSERT INTO `results` (`id`,`name`,`description`) VALUES ("0","success","This is the status of a successful project build");
 INSERT INTO `results` (`id`,`name`,`description`) VALUES ("1","failure","This is the status of a failed project build");
 INSERT INTO `results` (`id`,`name`,`description`) VALUES ("2","stalled","This is the status of a project that cannot build due to unsatisfied dependencies");
 
 
-# Dump of table runs
-# ------------------------------------------------------------
-
+# A run is the execution of gump on a particular machine
+# at a particular point in time.
 DROP TABLE IF EXISTS `runs`;
-
 CREATE TABLE `runs` (
-  `id` varchar(64) NOT NULL default '',
+  `id` varchar(255) NOT NULL default '',
   `start_time` datetime NOT NULL default '0000-00-00 00:00:00',
   `end_time` datetime NOT NULL default '0000-00-00 00:00:00',
-  `workspace` varchar(48) NOT NULL default '',
+  `workspace_id` varchar(255) NOT NULL default '',
   `name` varchar(12) NOT NULL default '',
   PRIMARY KEY  (`id`),
-  KEY `workspace` (`workspace`)
-) ENGINE=MyISAM;
-
-INSERT INTO `runs` (`id`,`start_time`,`end_time`,`workspace`,`name`) VALUES ("test1.blah.com:main:200411080000","2004-11-08 00:00:00","2004-11-08 00:22:00","test1.blah.com:main","200411080000");
-INSERT INTO `runs` (`id`,`start_time`,`end_time`,`workspace`,`name`) VALUES ("test1.blah.com:main:200411080100","2004-11-08 01:00:00","2004-11-08 01:33:00","test1.blah.com:main","200411080100");
-INSERT INTO `runs` (`id`,`start_time`,`end_time`,`workspace`,`name`) VALUES ("test2.blah.com:main:200411080000","2004-11-08 00:00:00","2004-11-08 00:22:00","test2.blah.com:main","200411080000");
-INSERT INTO `runs` (`id`,`start_time`,`end_time`,`workspace`,`name`) VALUES ("test2.blah.com:main:200411080100","2004-11-08 01:00:00","2004-11-08 01:33:00","test2.blah.com:main","200411080100");
-
-
-# Dump of table runtime_dependencies
-# ------------------------------------------------------------
-
-DROP TABLE IF EXISTS `runtime_dependencies`;
-
-CREATE TABLE `runtime_dependencies` (
-  `run` varchar(64) NOT NULL default '',
-  `package` varchar(64) NOT NULL default ''
-) ENGINE=MyISAM;
-
+  KEY `workspace_id` (`workspace_id`)
+);
 
 
-# Dump of table workspaces
-# ------------------------------------------------------------
-
+# A workspace is a setup of gump on a particular machine.
+# It corresponds directly to the "workspace" concept in
+# gump metadata.
 DROP TABLE IF EXISTS `workspaces`;
-
 CREATE TABLE `workspaces` (
-  `id` varchar(48) NOT NULL default '0',
-  `name` varchar(16) NOT NULL default '',
-  `host` varchar(32) NOT NULL default '',
+  `id` varchar(255) NOT NULL default '0',
+  `name` varchar(32) NOT NULL default '',
+  `host` varchar(255) NOT NULL default '',
   `description` tinytext,
   PRIMARY KEY  (`id`),
   KEY `host` (`host`)
 ) ENGINE=MyISAM;
-
-INSERT INTO `workspaces` (`id`,`name`,`host`,`description`) VALUES ("test1.blah.com:main","main","test1.blah.com","The Main Run");
-INSERT INTO `workspaces` (`id`,`name`,`host`,`description`) VALUES ("test2.blah.com:main","main","test2.blah.com","The Main Run");
-
-

Copied: gump/branches/Gump3/gumpdb/src/sql/gump3-old-sampledata.sql (from r209092, gump/branches/Gump3/gumpdb/src/sql/gump3-database-definition.sql)
URL: http://svn.apache.org/viewcvs/gump/branches/Gump3/gumpdb/src/sql/gump3-old-sampledata.sql?p2=gump/branches/Gump3/gumpdb/src/sql/gump3-old-sampledata.sql&p1=gump/branches/Gump3/gumpdb/src/sql/gump3-database-definition.sql&r1=209092&r2=209265&rev=209265&view=diff
==============================================================================
--- gump/branches/Gump3/gumpdb/src/sql/gump3-database-definition.sql (original)
+++ gump/branches/Gump3/gumpdb/src/sql/gump3-old-sampledata.sql Tue Jul  5 05:06:27 2005
@@ -1,105 +1,43 @@
-# CocoaMySQL dump
-# Version 0.5
-# http://cocoamysql.sourceforge.net
+# Copyright 2004-2005 The Apache Software Foundation
 #
-# Host: localhost (MySQL 4.1.7-standard)
-# Database: gump
-# Generation Time: 2004-11-30 22:22:01 -0800
-# ************************************************************
-
-# Dump of table builds
-# ------------------------------------------------------------
-
-DROP TABLE IF EXISTS `builds`;
-
-CREATE TABLE `builds` (
-  `id` varchar(96) NOT NULL default '',
-  `run` varchar(64) NOT NULL default '',
-  `project_version` varchar(64) NOT NULL default '',
-  `start_time` datetime NOT NULL default '0000-00-00 00:00:00',
-  `end_time` datetime NOT NULL default '0000-00-00 00:00:00',
-  `result` int(1) NOT NULL default '0',
-  `log` text,
-  PRIMARY KEY  (`id`),
-  KEY `run` (`run`)
-) ENGINE=MyISAM;
-
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test1.blah.com:main:200411080000:0","test1.blah.com:main:200411080000","test1.blah.com:main:200411080000:project1","2004-11-08 00:01:03","2004-11-08 00:08:32","0",NULL);
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test1.blah.com:main:200411080100:0","test1.blah.com:main:200411080100","test1.blah.com:main:200411080100:project1","2004-11-08 01:01:03","2004-11-08 01:08:32","0",NULL);
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test1.blah.com:main:200411080000:1","test1.blah.com:main:200411080000","test1.blah.com:main:200411080000:project2","2004-11-08 00:10:09","2004-11-08 00:14:22","1",NULL);
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test1.blah.com:main:200411080100:1","test1.blah.com:main:200411080100","test1.blah.com:main:200411080100:project2","2004-11-08 01:10:09","2004-11-08 01:14:22","0",NULL);
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test2.blah.com:main:200411080000:0","test2.blah.com:main:200411080000","test2.blah.com:main:200411080000:project1","2004-11-08 00:01:03","2004-11-08 00:08:32","1",NULL);
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test2.blah.com:main:200411080100:0","test2.blah.com:main:200411080100","test2.blah.com:main:200411080100:project1","2004-11-08 01:01:03","2004-11-08 01:08:32","0",NULL);
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test2.blah.com:main:200411080000:1","test2.blah.com:main:200411080000","test2.blah.com:main:200411080000:project2","2004-11-08 00:10:09","2004-11-08 00:14:22","2",NULL);
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test2.blah.com:main:200411080100:1","test2.blah.com:main:200411080100","test2.blah.com:main:200411080100:project2","2004-11-08 01:10:09","2004-11-08 01:14:22","0",NULL);
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test1.blah.com:main:200411080000:2","test1.blah.com:main:200411080000","test1.blah.com:main:200411080000:project3","2004-11-08 00:15:29","2004-11-08 00:15:32","2",NULL);
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test1.blah.com:main:200411080100:2","test1.blah.com:main:200411080100","test1.blah.com:main:200411080100:project3","2004-11-08 01:15:30","2004-11-08 01:15:37","1",NULL);
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test2.blah.com:main:200411080000:2","test2.blah.com:main:200411080000","test2.blah.com:main:200411080000:project3","2004-11-08 00:15:29","2004-11-08 00:15:33","2",NULL);
-INSERT INTO `builds` (`id`,`run`,`project_version`,`start_time`,`end_time`,`result`,`log`) VALUES ("test2.blah.com:main:200411080100:2","test2.blah.com:main:200411080100","test2.blah.com:main:200411080100:project3","2004-11-08 01:15:39","2004-11-08 01:15:43","0",NULL);
-
-
-# Dump of table hosts
-# ------------------------------------------------------------
-
-DROP TABLE IF EXISTS `hosts`;
-
-CREATE TABLE `hosts` (
-  `address` varchar(32) NOT NULL default '',
-  `description` text,
-  `cpu_arch` varchar(8) NOT NULL default 'x86',
-  `cpu_number` int(2) unsigned NOT NULL default '1',
-  `cpu_speed_Mhz` int(8) unsigned default NULL,
-  `memory_Mb` int(8) unsigned default NULL,
-  `disk_Gb` int(8) unsigned default NULL,
-  `name` varchar(16) NOT NULL default '',
-  PRIMARY KEY  (`address`)
-) ENGINE=MyISAM;
-
-INSERT INTO `hosts` (`address`,`description`,`cpu_arch`,`cpu_number`,`cpu_speed_Mhz`,`memory_Mb`,`disk_Gb`,`name`) VALUES ("test1.blah.com","debug host 1","x86","1",NULL,NULL,NULL,"Test 1");
-INSERT INTO `hosts` (`address`,`description`,`cpu_arch`,`cpu_number`,`cpu_speed_Mhz`,`memory_Mb`,`disk_Gb`,`name`) VALUES ("test2.blah.com","debug host 2","x86","1",NULL,NULL,NULL,"Test 2");
-
-
-# Dump of table modules
-# ------------------------------------------------------------
-
-DROP TABLE IF EXISTS `modules`;
-
-CREATE TABLE `modules` (
-  `name` varchar(32) NOT NULL default '',
-  `description` tinytext,
-  `descriptor` varchar(128) NOT NULL default '',
-  PRIMARY KEY  (`name`)
-) ENGINE=MyISAM;
-
-INSERT INTO `modules` (`name`,`description`,`descriptor`) VALUES ("module1",NULL,"http://blah.com/module1/gump.xml");
-INSERT INTO `modules` (`name`,`description`,`descriptor`) VALUES ("module2",NULL,"http://blah.com/module2/gump.xml");
-
-
-# Dump of table packages
-# ------------------------------------------------------------
-
-DROP TABLE IF EXISTS `packages`;
-
-CREATE TABLE `packages` (
-  `uri` varchar(64) NOT NULL default '',
-  `version` varchar(16) NOT NULL default '1.0',
-  `location` varchar(64) NOT NULL default ':',
-  `name` varchar(16) NOT NULL default ''
-) ENGINE=MyISAM;
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+#     http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
 
+#
+# GUMP3 Database model for Dynagump -- sample data
+#
+# Less useful now Gump3 can actually populate the database...
 
+INSERT INTO `builds` (`id`,`run_id`,`project_version_id`,`start_time`,`end_time`,`result`,`log`) VALUES ("test1.blah.com:main:200411080000:0","test1.blah.com:main:200411080000","test1.blah.com:main:200411080000:project1","2004-11-08 00:01:03","2004-11-08 00:08:32","0",NULL);
+INSERT INTO `builds` (`id`,`run_id`,`project_version_id`,`start_time`,`end_time`,`result`,`log`) VALUES ("test1.blah.com:main:200411080100:0","test1.blah.com:main:200411080100","test1.blah.com:main:200411080100:project1","2004-11-08 01:01:03","2004-11-08 01:08:32","0",NULL);
+INSERT INTO `builds` (`id`,`run_id`,`project_version_id`,`start_time`,`end_time`,`result`,`log`) VALUES ("test1.blah.com:main:200411080000:1","test1.blah.com:main:200411080000","test1.blah.com:main:200411080000:project2","2004-11-08 00:10:09","2004-11-08 00:14:22","1",NULL);
+INSERT INTO `builds` (`id`,`run_id`,`project_version_id`,`start_time`,`end_time`,`result`,`log`) VALUES ("test1.blah.com:main:200411080100:1","test1.blah.com:main:200411080100","test1.blah.com:main:200411080100:project2","2004-11-08 01:10:09","2004-11-08 01:14:22","0",NULL);
+INSERT INTO `builds` (`id`,`run_id`,`project_version_id`,`start_time`,`end_time`,`result`,`log`) VALUES ("test2.blah.com:main:200411080000:0","test2.blah.com:main:200411080000","test2.blah.com:main:200411080000:project1","2004-11-08 00:01:03","2004-11-08 00:08:32","1",NULL);
+INSERT INTO `builds` (`id`,`run_id`,`project_version_id`,`start_time`,`end_time`,`result`,`log`) VALUES ("test2.blah.com:main:200411080100:0","test2.blah.com:main:200411080100","test2.blah.com:main:200411080100:project1","2004-11-08 01:01:03","2004-11-08 01:08:32","0",NULL);
+INSERT INTO `builds` (`id`,`run_id`,`project_version_id`,`start_time`,`end_time`,`result`,`log`) VALUES ("test2.blah.com:main:200411080000:1","test2.blah.com:main:200411080000","test2.blah.com:main:200411080000:project2","2004-11-08 00:10:09","2004-11-08 00:14:22","2",NULL);
+INSERT INTO `builds` (`id`,`run_id`,`project_version_id`,`start_time`,`end_time`,`result`,`log`) VALUES ("test2.blah.com:main:200411080100:1","test2.blah.com:main:200411080100","test2.blah.com:main:200411080100:project2","2004-11-08 01:10:09","2004-11-08 01:14:22","0",NULL);
+INSERT INTO `builds` (`id`,`run_id`,`project_version_id`,`start_time`,`end_time`,`result`,`log`) VALUES ("test1.blah.com:main:200411080000:2","test1.blah.com:main:200411080000","test1.blah.com:main:200411080000:project3","2004-11-08 00:15:29","2004-11-08 00:15:32","2",NULL);
+INSERT INTO `builds` (`id`,`run_id`,`project_version_id`,`start_time`,`end_time`,`result`,`log`) VALUES ("test1.blah.com:main:200411080100:2","test1.blah.com:main:200411080100","test1.blah.com:main:200411080100:project3","2004-11-08 01:15:30","2004-11-08 01:15:37","1",NULL);
+INSERT INTO `builds` (`id`,`run_id`,`project_version_id`,`start_time`,`end_time`,`result`,`log`) VALUES ("test2.blah.com:main:200411080000:2","test2.blah.com:main:200411080000","test2.blah.com:main:200411080000:project3","2004-11-08 00:15:29","2004-11-08 00:15:33","2",NULL);
+INSERT INTO `builds` (`id`,`run_id`,`project_version_id`,`start_time`,`end_time`,`result`,`log`) VALUES ("test2.blah.com:main:200411080100:2","test2.blah.com:main:200411080100","test2.blah.com:main:200411080100:project3","2004-11-08 01:15:39","2004-11-08 01:15:43","0",NULL);
 
-# Dump of table project_dependencies
-# ------------------------------------------------------------
+INSERT INTO `causes` (`build_id`,`cause_id`,`cause_table`) VALUES ("test2.blah.com:main:200411080000:1","test2.blah.com:main:200411080000:project1","project_versions");
+INSERT INTO `causes` (`build_id`,`cause_id`,`cause_table`) VALUES ("test1.blah.com:main:200411080000:2","test1.blah.com:main:200411080000:project1","project_versions");
 
-DROP TABLE IF EXISTS `project_dependencies`;
+INSERT INTO `hosts` (`address`,`description`,`cpu_arch`,`cpu_number`,`cpu_speed_Mhz`,`memory_Mb`,`disk_Gb`,`name`) VALUES ("test1.blah.com","debug host 1","x86","1",NULL,NULL,NULL,"Test 1");
+INSERT INTO `hosts` (`address`,`description`,`cpu_arch`,`cpu_number`,`cpu_speed_Mhz`,`memory_Mb`,`disk_Gb`,`name`) VALUES ("test2.blah.com","debug host 2","x86","1",NULL,NULL,NULL,"Test 2");
 
-CREATE TABLE `project_dependencies` (
-  `dependee` varchar(64) NOT NULL default '',
-  `dependant` varchar(64) NOT NULL default '',
-  KEY `dependee` (`dependee`),
-  KEY `dependant` (`dependant`)
-) ENGINE=MyISAM;
+INSERT INTO `modules` (`name`,`description`,`id`) VALUES ("module1",NULL,"module1");
+INSERT INTO `modules` (`name`,`description`,`id`) VALUES ("module2",NULL,"module2");
 
 INSERT INTO `project_dependencies` (`dependee`,`dependant`) VALUES ("test1.blah.com:main:200411080000:project1","test1.blah.com:main:200411080000:project2");
 INSERT INTO `project_dependencies` (`dependee`,`dependant`) VALUES ("test1.blah.com:main:200411080000:project3","test1.blah.com:main:200411080000:project2");
@@ -114,115 +52,27 @@
 INSERT INTO `project_dependencies` (`dependee`,`dependant`) VALUES ("test2.blah.com:main:200411080100:project3","test2.blah.com:main:200411080100:project2");
 INSERT INTO `project_dependencies` (`dependee`,`dependant`) VALUES ("test2.blah.com:main:200411080100:project3","test2.blah.com:main:200411080100:project1");
 
-
-# Dump of table project_versions
-# ------------------------------------------------------------
-
-DROP TABLE IF EXISTS `project_versions`;
-
-CREATE TABLE `project_versions` (
-  `id` varchar(64) NOT NULL default '',
-  `project` varchar(64) NOT NULL default ''
-) ENGINE=MyISAM;
-
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test1.blah.com:main:200411080000:project1","project1");
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test1.blah.com:main:200411080000:project2","project2");
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test1.blah.com:main:200411080000:project3","project3");
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test1.blah.com:main:200411080100:project1","project1");
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test1.blah.com:main:200411080100:project3","project3");
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test1.blah.com:main:200411080100:project2","project2");
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test2.blah.com:main:200411080000:project1","project1");
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test2.blah.com:main:200411080000:project2","project2");
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test2.blah.com:main:200411080000:project3","project3");
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test2.blah.com:main:200411080100:project1","project1");
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test2.blah.com:main:200411080100:project2","project2");
-INSERT INTO `project_versions` (`id`,`project`) VALUES ("test2.blah.com:main:200411080100:project3","project3");
-
-
-# Dump of table projects
-# ------------------------------------------------------------
-
-DROP TABLE IF EXISTS `projects`;
-
-CREATE TABLE `projects` (
-  `name` varchar(32) NOT NULL default '',
-  `description` tinytext,
-  `module` varchar(32) NOT NULL default '',
-  `descriptor` varchar(128) default NULL,
-  PRIMARY KEY  (`name`),
-  KEY `module` (`module`)
-) ENGINE=MyISAM;
-
-INSERT INTO `projects` (`name`,`description`,`module`,`descriptor`) VALUES ("project1","The first project","module1",NULL);
-INSERT INTO `projects` (`name`,`description`,`module`,`descriptor`) VALUES ("project2","The second project","module1",NULL);
-INSERT INTO `projects` (`name`,`description`,`module`,`descriptor`) VALUES ("project3","The third project","module2",NULL);
-
-
-# Dump of table results
-# ------------------------------------------------------------
-
-DROP TABLE IF EXISTS `results`;
-
-CREATE TABLE `results` (
-  `id` int(1) NOT NULL default '0',
-  `name` varchar(16) NOT NULL default '',
-  `description` text,
-  PRIMARY KEY  (`id`)
-) ENGINE=MyISAM;
-
-INSERT INTO `results` (`id`,`name`,`description`) VALUES ("0","success","This is the status of a successful project build");
-INSERT INTO `results` (`id`,`name`,`description`) VALUES ("1","failure","This is the status of a failed project build");
-INSERT INTO `results` (`id`,`name`,`description`) VALUES ("2","stalled","This is the status of a project that cannot build due to unsatisfied dependencies");
-
-
-# Dump of table runs
-# ------------------------------------------------------------
-
-DROP TABLE IF EXISTS `runs`;
-
-CREATE TABLE `runs` (
-  `id` varchar(64) NOT NULL default '',
-  `start_time` datetime NOT NULL default '0000-00-00 00:00:00',
-  `end_time` datetime NOT NULL default '0000-00-00 00:00:00',
-  `workspace` varchar(48) NOT NULL default '',
-  `name` varchar(12) NOT NULL default '',
-  PRIMARY KEY  (`id`),
-  KEY `workspace` (`workspace`)
-) ENGINE=MyISAM;
-
-INSERT INTO `runs` (`id`,`start_time`,`end_time`,`workspace`,`name`) VALUES ("test1.blah.com:main:200411080000","2004-11-08 00:00:00","2004-11-08 00:22:00","test1.blah.com:main","200411080000");
-INSERT INTO `runs` (`id`,`start_time`,`end_time`,`workspace`,`name`) VALUES ("test1.blah.com:main:200411080100","2004-11-08 01:00:00","2004-11-08 01:33:00","test1.blah.com:main","200411080100");
-INSERT INTO `runs` (`id`,`start_time`,`end_time`,`workspace`,`name`) VALUES ("test2.blah.com:main:200411080000","2004-11-08 00:00:00","2004-11-08 00:22:00","test2.blah.com:main","200411080000");
-INSERT INTO `runs` (`id`,`start_time`,`end_time`,`workspace`,`name`) VALUES ("test2.blah.com:main:200411080100","2004-11-08 01:00:00","2004-11-08 01:33:00","test2.blah.com:main","200411080100");
-
-
-# Dump of table runtime_dependencies
-# ------------------------------------------------------------
-
-DROP TABLE IF EXISTS `runtime_dependencies`;
-
-CREATE TABLE `runtime_dependencies` (
-  `run` varchar(64) NOT NULL default '',
-  `package` varchar(64) NOT NULL default ''
-) ENGINE=MyISAM;
-
-
-
-# Dump of table workspaces
-# ------------------------------------------------------------
-
-DROP TABLE IF EXISTS `workspaces`;
-
-CREATE TABLE `workspaces` (
-  `id` varchar(48) NOT NULL default '0',
-  `name` varchar(16) NOT NULL default '',
-  `host` varchar(32) NOT NULL default '',
-  `description` tinytext,
-  PRIMARY KEY  (`id`),
-  KEY `host` (`host`)
-) ENGINE=MyISAM;
+INSERT INTO `project_versions` (`id`,`project_id`) VALUES ("test1.blah.com:main:200411080000:project1","module1:project1");
+INSERT INTO `project_versions` (`id`,`project_id`) VALUES ("test1.blah.com:main:200411080000:project2","module1:project2");
+INSERT INTO `project_versions` (`id`,`project_id`) VALUES ("test1.blah.com:main:200411080000:project3","module2:project3");
+INSERT INTO `project_versions` (`id`,`project_id`) VALUES ("test1.blah.com:main:200411080100:project1","module1:project1");
+INSERT INTO `project_versions` (`id`,`project_id`) VALUES ("test1.blah.com:main:200411080100:project3","module2:project3");
+INSERT INTO `project_versions` (`id`,`project_id`) VALUES ("test1.blah.com:main:200411080100:project2","module1:project2");
+INSERT INTO `project_versions` (`id`,`project_id`) VALUES ("test2.blah.com:main:200411080000:project1","module1:project1");
+INSERT INTO `project_versions` (`id`,`project_id`) VALUES ("test2.blah.com:main:200411080000:project2","module1:project2");
+INSERT INTO `project_versions` (`id`,`project_id`) VALUES ("test2.blah.com:main:200411080000:project3","module2:project3");
+INSERT INTO `project_versions` (`id`,`project_id`) VALUES ("test2.blah.com:main:200411080100:project1","module1:project1");
+INSERT INTO `project_versions` (`id`,`project_id`) VALUES ("test2.blah.com:main:200411080100:project2","module1:project2");
+INSERT INTO `project_versions` (`id`,`project_id`) VALUES ("test2.blah.com:main:200411080100:project3","module2:project3");
+
+INSERT INTO `projects` (`name`,`description`,`module_id`,`id`) VALUES ("project1","The first project","module1","module1:project1");
+INSERT INTO `projects` (`name`,`description`,`module_id`,`id`) VALUES ("project2","The second project","module1","module1:project2");
+INSERT INTO `projects` (`name`,`description`,`module_id`,`id`) VALUES ("project3","The third project","module2","module2:project3");
+
+INSERT INTO `runs` (`id`,`start_time`,`end_time`,`workspace_id`,`name`) VALUES ("test1.blah.com:main:200411080000","2004-11-08 00:00:00","2004-11-08 00:22:00","test1.blah.com:main","200411080000");
+INSERT INTO `runs` (`id`,`start_time`,`end_time`,`workspace_id`,`name`) VALUES ("test1.blah.com:main:200411080100","2004-11-08 01:00:00","2004-11-08 01:33:00","test1.blah.com:main","200411080100");
+INSERT INTO `runs` (`id`,`start_time`,`end_time`,`workspace_id`,`name`) VALUES ("test2.blah.com:main:200411080000","2004-11-08 00:00:00","2004-11-08 00:22:00","test2.blah.com:main","200411080000");
+INSERT INTO `runs` (`id`,`start_time`,`end_time`,`workspace_id`,`name`) VALUES ("test2.blah.com:main:200411080100","2004-11-08 01:00:00","2004-11-08 01:33:00","test2.blah.com:main","200411080100");
 
 INSERT INTO `workspaces` (`id`,`name`,`host`,`description`) VALUES ("test1.blah.com:main","main","test1.blah.com","The Main Run");
 INSERT INTO `workspaces` (`id`,`name`,`host`,`description`) VALUES ("test2.blah.com:main","main","test2.blah.com","The Main Run");
-
-

Added: gump/branches/Gump3/gumpdb/src/sql/gump3-sampledata.sql
URL: http://svn.apache.org/viewcvs/gump/branches/Gump3/gumpdb/src/sql/gump3-sampledata.sql?rev=209265&view=auto
==============================================================================
--- gump/branches/Gump3/gumpdb/src/sql/gump3-sampledata.sql (added)
+++ gump/branches/Gump3/gumpdb/src/sql/gump3-sampledata.sql Tue Jul  5 05:06:27 2005
@@ -0,0 +1,298 @@
+-- MySQL dump 9.11
+--
+-- Host: localhost    Database: gump
+-- ------------------------------------------------------
+-- Server version	4.0.23_Debian-3ubuntu2-log
+
+--
+-- Table structure for table `builds`
+--
+
+CREATE TABLE `builds` (
+  `id` varchar(255) NOT NULL default '',
+  `run_id` varchar(255) NOT NULL default '',
+  `project_version_id` varchar(255) NOT NULL default '',
+  `start_time` datetime NOT NULL default '0000-00-00 00:00:00',
+  `end_time` datetime NOT NULL default '0000-00-00 00:00:00',
+  `result` int(2) NOT NULL default '0',
+  `log` text,
+  PRIMARY KEY  (`id`),
+  KEY `run_id` (`run_id`),
+  KEY `project_version_id` (`project_version_id`),
+  KEY `result` (`result`)
+) TYPE=MyISAM;
+
+--
+-- Dumping data for table `builds`
+--
+
+INSERT INTO `builds` VALUES ('giraffe/generic@200507051351:0','giraffe/generic@200507051351','giraffe/generic@200507051351/xjavac','2005-07-05 13:51:54','2005-07-05 13:51:54',0,'Log saving still a TODO!');
+INSERT INTO `builds` VALUES ('giraffe/generic@200507051351:1','giraffe/generic@200507051351','giraffe/generic@200507051351/jaxp','2005-07-05 13:51:54','2005-07-05 13:51:54',0,'Log saving still a TODO!');
+INSERT INTO `builds` VALUES ('giraffe/generic@200507051351:2','giraffe/generic@200507051351','giraffe/generic@200507051351/bootstrap-ant','2005-07-05 13:51:54','2005-07-05 13:51:54',0,'Log saving still a TODO!');
+INSERT INTO `builds` VALUES ('giraffe/generic@200507051351:3','giraffe/generic@200507051351','giraffe/generic@200507051351/xml-apis','2005-07-05 13:51:54','2005-07-05 13:51:54',1,'Log saving still a TODO!');
+INSERT INTO `builds` VALUES ('giraffe/generic@200507051351:4','giraffe/generic@200507051351','giraffe/generic@200507051351/xml-resolver','2005-07-05 13:51:54','2005-07-05 13:51:54',2,'Log saving still a TODO!');
+INSERT INTO `builds` VALUES ('giraffe/generic@200507051351:5','giraffe/generic@200507051351','giraffe/generic@200507051351/xml-commons-resolver','2005-07-05 13:51:54','2005-07-05 13:51:54',2,'Log saving still a TODO!');
+INSERT INTO `builds` VALUES ('giraffe/generic@200507051351:6','giraffe/generic@200507051351','giraffe/generic@200507051351/xml-xerces','2005-07-05 13:51:54','2005-07-05 13:51:54',2,'Log saving still a TODO!');
+INSERT INTO `builds` VALUES ('giraffe/generic@200507051351:7','giraffe/generic@200507051351','giraffe/generic@200507051351/xml-commons-which','2005-07-05 13:51:54','2005-07-05 13:51:54',2,'Log saving still a TODO!');
+INSERT INTO `builds` VALUES ('giraffe/generic@200507051351:8','giraffe/generic@200507051351','giraffe/generic@200507051351/ant','2005-07-05 13:51:54','2005-07-05 13:51:54',2,'Log saving still a TODO!');
+INSERT INTO `builds` VALUES ('giraffe/generic@200507051351:9','giraffe/generic@200507051351','giraffe/generic@200507051351/dist-xerces','2005-07-05 13:51:54','2005-07-05 13:51:54',2,'Log saving still a TODO!');
+INSERT INTO `builds` VALUES ('giraffe/generic@200507051351:10','giraffe/generic@200507051351','giraffe/generic@200507051351/xml-xercesImpl','2005-07-05 13:51:54','2005-07-05 13:51:54',2,'Log saving still a TODO!');
+INSERT INTO `builds` VALUES ('giraffe/generic@200507051351:11','giraffe/generic@200507051351','giraffe/generic@200507051351/jaxr','2005-07-05 13:51:54','2005-07-05 13:51:54',0,'Log saving still a TODO!');
+INSERT INTO `builds` VALUES ('giraffe/generic@200507051351:12','giraffe/generic@200507051351','giraffe/generic@200507051351/jaxm','2005-07-05 13:51:54','2005-07-05 13:51:54',0,'Log saving still a TODO!');
+INSERT INTO `builds` VALUES ('giraffe/generic@200507051351:13','giraffe/generic@200507051351','giraffe/generic@200507051351/jaxrpc','2005-07-05 13:51:54','2005-07-05 13:51:54',0,'Log saving still a TODO!');
+INSERT INTO `builds` VALUES ('giraffe/gump3-test-fixture@200507051352:0','giraffe/gump3-test-fixture@200507051352','giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-1','2005-07-05 13:52:11','2005-07-05 13:52:11',0,'Log saving still a TODO!');
+INSERT INTO `builds` VALUES ('giraffe/gump3-test-fixture@200507051352:1','giraffe/gump3-test-fixture@200507051352','giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-2','2005-07-05 13:52:11','2005-07-05 13:52:11',0,'Log saving still a TODO!');
+INSERT INTO `builds` VALUES ('giraffe/gump3-test-fixture@200507051352:2','giraffe/gump3-test-fixture@200507051352','giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-3','2005-07-05 13:52:11','2005-07-05 13:52:11',0,'Log saving still a TODO!');
+INSERT INTO `builds` VALUES ('giraffe/gump3-test-fixture@200507051352:3','giraffe/gump3-test-fixture@200507051352','giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-dir-management-1','2005-07-05 13:52:11','2005-07-05 13:52:11',0,'Log saving still a TODO!');
+INSERT INTO `builds` VALUES ('giraffe/gump3-test-fixture@200507051352:4','giraffe/gump3-test-fixture@200507051352','giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-ant-based-1','2005-07-05 13:52:11','2005-07-05 13:52:11',0,'Log saving still a TODO!');
+INSERT INTO `builds` VALUES ('giraffe/gump3-test-fixture@200507051352:5','giraffe/gump3-test-fixture@200507051352','giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-failure-1','2005-07-05 13:52:11','2005-07-05 13:52:11',0,'Log saving still a TODO!');
+INSERT INTO `builds` VALUES ('giraffe/gump3-test-fixture@200507051352:6','giraffe/gump3-test-fixture@200507051352','giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-prereq-failure-1','2005-07-05 13:52:11','2005-07-05 13:52:11',0,'Log saving still a TODO!');
+
+--
+-- Table structure for table `causes`
+--
+
+CREATE TABLE `causes` (
+  `build_id` varchar(255) NOT NULL default '',
+  `cause_id` varchar(255) NOT NULL default '',
+  `cause_table` varchar(32) NOT NULL default 'project_versions',
+  KEY `build_id` (`build_id`),
+  KEY `cause_id` (`cause_id`)
+) TYPE=MyISAM;
+
+--
+-- Dumping data for table `causes`
+--
+
+INSERT INTO `causes` VALUES ('giraffe/generic@200507051351:4','giraffe/generic@200507051351/xml-apis','project_versions');
+INSERT INTO `causes` VALUES ('giraffe/generic@200507051351:5','giraffe/generic@200507051351/xml-resolver','project_versions');
+INSERT INTO `causes` VALUES ('giraffe/generic@200507051351:6','giraffe/generic@200507051351/xml-commons-resolver','project_versions');
+INSERT INTO `causes` VALUES ('giraffe/generic@200507051351:7','giraffe/generic@200507051351/xml-xerces','project_versions');
+INSERT INTO `causes` VALUES ('giraffe/generic@200507051351:8','giraffe/generic@200507051351/xml-xerces','project_versions');
+INSERT INTO `causes` VALUES ('giraffe/generic@200507051351:9','giraffe/generic@200507051351/ant','project_versions');
+INSERT INTO `causes` VALUES ('giraffe/generic@200507051351:10','giraffe/generic@200507051351/xml-xerces','project_versions');
+
+--
+-- Table structure for table `hosts`
+--
+
+CREATE TABLE `hosts` (
+  `address` varchar(255) NOT NULL default '',
+  `description` text,
+  `cpu_arch` varchar(8) NOT NULL default 'x86',
+  `cpu_number` int(2) unsigned NOT NULL default '1',
+  `cpu_speed_Mhz` int(8) unsigned default NULL,
+  `memory_Mb` int(8) unsigned default NULL,
+  `disk_Gb` int(8) unsigned default NULL,
+  `name` varchar(32) NOT NULL default '',
+  PRIMARY KEY  (`address`)
+) TYPE=MyISAM;
+
+--
+-- Dumping data for table `hosts`
+--
+
+INSERT INTO `hosts` VALUES ('giraffe','giraffe (Linux,2.6.10-5-386,#1 Fri May 20 13:52:48 UTC 2005,i686,)','',0,0,0,NULL,'giraffe');
+
+--
+-- Table structure for table `modules`
+--
+
+CREATE TABLE `modules` (
+  `id` varchar(255) NOT NULL default '',
+  `name` varchar(32) NOT NULL default '',
+  `description` tinytext,
+  PRIMARY KEY  (`id`)
+) TYPE=MyISAM;
+
+--
+-- Dumping data for table `modules`
+--
+
+INSERT INTO `modules` VALUES ('giraffe/generic/xml-xerces2','xml-xerces2','\n    Java XML Parser - the sequel with no equal\n  ');
+INSERT INTO `modules` VALUES ('giraffe/generic/java-xml-pack','java-xml-pack','\n    Java XML Pack\n  ');
+INSERT INTO `modules` VALUES ('giraffe/generic/ant','ant','\n    Java based build tool\n  ');
+INSERT INTO `modules` VALUES ('giraffe/generic/xml-commons','xml-commons','\n    XML commons($Revision: 1.24 $) externally defined standards - DOM,SAX,JAXP; plus xml utilities\n  ');
+INSERT INTO `modules` VALUES ('giraffe/gump3-test-fixture/gump-fixture-svn','gump-fixture-svn','None');
+
+--
+-- Table structure for table `project_dependencies`
+--
+
+CREATE TABLE `project_dependencies` (
+  `dependee` varchar(255) NOT NULL default '',
+  `dependant` varchar(255) NOT NULL default '',
+  KEY `dependee` (`dependee`),
+  KEY `dependant` (`dependant`)
+) TYPE=MyISAM;
+
+--
+-- Dumping data for table `project_dependencies`
+--
+
+INSERT INTO `project_dependencies` VALUES ('giraffe/generic@200507051351/bootstrap-ant','giraffe/generic@200507051351/jaxp');
+INSERT INTO `project_dependencies` VALUES ('giraffe/generic@200507051351/xml-apis','giraffe/generic@200507051351/bootstrap-ant');
+INSERT INTO `project_dependencies` VALUES ('giraffe/generic@200507051351/xml-apis','giraffe/generic@200507051351/jaxp');
+INSERT INTO `project_dependencies` VALUES ('giraffe/generic@200507051351/xml-resolver','giraffe/generic@200507051351/jaxp');
+INSERT INTO `project_dependencies` VALUES ('giraffe/generic@200507051351/xml-resolver','giraffe/generic@200507051351/xml-apis');
+INSERT INTO `project_dependencies` VALUES ('giraffe/generic@200507051351/xml-resolver','giraffe/generic@200507051351/bootstrap-ant');
+INSERT INTO `project_dependencies` VALUES ('giraffe/generic@200507051351/xml-commons-resolver','giraffe/generic@200507051351/xml-resolver');
+INSERT INTO `project_dependencies` VALUES ('giraffe/generic@200507051351/xml-xerces','giraffe/generic@200507051351/bootstrap-ant');
+INSERT INTO `project_dependencies` VALUES ('giraffe/generic@200507051351/xml-xerces','giraffe/generic@200507051351/xjavac');
+INSERT INTO `project_dependencies` VALUES ('giraffe/generic@200507051351/xml-xerces','giraffe/generic@200507051351/xml-commons-resolver');
+INSERT INTO `project_dependencies` VALUES ('giraffe/generic@200507051351/xml-xerces','giraffe/generic@200507051351/jaxp');
+INSERT INTO `project_dependencies` VALUES ('giraffe/generic@200507051351/xml-commons-which','giraffe/generic@200507051351/xml-xerces');
+INSERT INTO `project_dependencies` VALUES ('giraffe/generic@200507051351/xml-commons-which','giraffe/generic@200507051351/bootstrap-ant');
+INSERT INTO `project_dependencies` VALUES ('giraffe/generic@200507051351/ant','giraffe/generic@200507051351/bootstrap-ant');
+INSERT INTO `project_dependencies` VALUES ('giraffe/generic@200507051351/ant','giraffe/generic@200507051351/xml-xerces');
+INSERT INTO `project_dependencies` VALUES ('giraffe/generic@200507051351/ant','giraffe/generic@200507051351/xml-apis');
+INSERT INTO `project_dependencies` VALUES ('giraffe/generic@200507051351/dist-xerces','giraffe/generic@200507051351/ant');
+INSERT INTO `project_dependencies` VALUES ('giraffe/generic@200507051351/dist-xerces','giraffe/generic@200507051351/xjavac');
+INSERT INTO `project_dependencies` VALUES ('giraffe/generic@200507051351/xml-xercesImpl','giraffe/generic@200507051351/xml-xerces');
+INSERT INTO `project_dependencies` VALUES ('giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-2','giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-1');
+INSERT INTO `project_dependencies` VALUES ('giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-3','giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-1');
+INSERT INTO `project_dependencies` VALUES ('giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-3','giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-2');
+INSERT INTO `project_dependencies` VALUES ('giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-dir-management-1','giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-2');
+INSERT INTO `project_dependencies` VALUES ('giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-ant-based-1','giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-3');
+INSERT INTO `project_dependencies` VALUES ('giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-ant-based-1','giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-dir-management-1');
+INSERT INTO `project_dependencies` VALUES ('giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-prereq-failure-1','giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-1');
+INSERT INTO `project_dependencies` VALUES ('giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-prereq-failure-1','giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-3');
+INSERT INTO `project_dependencies` VALUES ('giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-prereq-failure-1','giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-ant-based-1');
+INSERT INTO `project_dependencies` VALUES ('giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-prereq-failure-1','giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-failure-1');
+
+--
+-- Table structure for table `project_versions`
+--
+
+CREATE TABLE `project_versions` (
+  `id` varchar(255) NOT NULL default '',
+  `project_id` varchar(255) NOT NULL default '',
+  PRIMARY KEY  (`id`)
+) TYPE=MyISAM;
+
+--
+-- Dumping data for table `project_versions`
+--
+
+INSERT INTO `project_versions` VALUES ('giraffe/generic@200507051351/xjavac','giraffe/generic/xml-xerces2/xjavac');
+INSERT INTO `project_versions` VALUES ('giraffe/generic@200507051351/jaxp','giraffe/generic/java-xml-pack/jaxp');
+INSERT INTO `project_versions` VALUES ('giraffe/generic@200507051351/bootstrap-ant','giraffe/generic/ant/bootstrap-ant');
+INSERT INTO `project_versions` VALUES ('giraffe/generic@200507051351/xml-apis','giraffe/generic/xml-commons/xml-apis');
+INSERT INTO `project_versions` VALUES ('giraffe/generic@200507051351/xml-resolver','giraffe/generic/xml-commons/xml-resolver');
+INSERT INTO `project_versions` VALUES ('giraffe/generic@200507051351/xml-commons-resolver','giraffe/generic/xml-commons/xml-commons-resolver');
+INSERT INTO `project_versions` VALUES ('giraffe/generic@200507051351/xml-xerces','giraffe/generic/xml-xerces2/xml-xerces');
+INSERT INTO `project_versions` VALUES ('giraffe/generic@200507051351/xml-commons-which','giraffe/generic/xml-commons/xml-commons-which');
+INSERT INTO `project_versions` VALUES ('giraffe/generic@200507051351/ant','giraffe/generic/ant/ant');
+INSERT INTO `project_versions` VALUES ('giraffe/generic@200507051351/dist-xerces','giraffe/generic/xml-xerces2/dist-xerces');
+INSERT INTO `project_versions` VALUES ('giraffe/generic@200507051351/xml-xercesImpl','giraffe/generic/xml-xerces2/xml-xercesImpl');
+INSERT INTO `project_versions` VALUES ('giraffe/generic@200507051351/jaxr','giraffe/generic/java-xml-pack/jaxr');
+INSERT INTO `project_versions` VALUES ('giraffe/generic@200507051351/jaxm','giraffe/generic/java-xml-pack/jaxm');
+INSERT INTO `project_versions` VALUES ('giraffe/generic@200507051351/jaxrpc','giraffe/generic/java-xml-pack/jaxrpc');
+INSERT INTO `project_versions` VALUES ('giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-1','giraffe/gump3-test-fixture/gump-fixture-svn/gump-fixture-svn-project-1');
+INSERT INTO `project_versions` VALUES ('giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-2','giraffe/gump3-test-fixture/gump-fixture-svn/gump-fixture-svn-project-2');
+INSERT INTO `project_versions` VALUES ('giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-3','giraffe/gump3-test-fixture/gump-fixture-svn/gump-fixture-svn-project-3');
+INSERT INTO `project_versions` VALUES ('giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-dir-management-1','giraffe/gump3-test-fixture/gump-fixture-svn/gump-fixture-svn-project-dir-management-1');
+INSERT INTO `project_versions` VALUES ('giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-ant-based-1','giraffe/gump3-test-fixture/gump-fixture-svn/gump-fixture-svn-project-ant-based-1');
+INSERT INTO `project_versions` VALUES ('giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-failure-1','giraffe/gump3-test-fixture/gump-fixture-svn/gump-fixture-svn-project-failure-1');
+INSERT INTO `project_versions` VALUES ('giraffe/gump3-test-fixture@200507051352/gump-fixture-svn-project-prereq-failure-1','giraffe/gump3-test-fixture/gump-fixture-svn/gump-fixture-svn-project-prereq-failure-1');
+
+--
+-- Table structure for table `projects`
+--
+
+CREATE TABLE `projects` (
+  `id` varchar(255) NOT NULL default '',
+  `name` varchar(255) NOT NULL default '',
+  `description` tinytext,
+  `module_id` varchar(255) NOT NULL default '',
+  PRIMARY KEY  (`id`),
+  KEY `name` (`name`),
+  KEY `module_id` (`module_id`)
+) TYPE=MyISAM;
+
+--
+-- Dumping data for table `projects`
+--
+
+INSERT INTO `projects` VALUES ('giraffe/generic/xml-xerces2/xjavac','xjavac','None','giraffe/generic/xml-xerces2');
+INSERT INTO `projects` VALUES ('giraffe/generic/java-xml-pack/jaxp','jaxp','None','giraffe/generic/java-xml-pack');
+INSERT INTO `projects` VALUES ('giraffe/generic/ant/bootstrap-ant','bootstrap-ant','None','giraffe/generic/ant');
+INSERT INTO `projects` VALUES ('giraffe/generic/xml-commons/xml-apis','xml-apis','None','giraffe/generic/xml-commons');
+INSERT INTO `projects` VALUES ('giraffe/generic/xml-commons/xml-resolver','xml-resolver','None','giraffe/generic/xml-commons');
+INSERT INTO `projects` VALUES ('giraffe/generic/xml-commons/xml-commons-resolver','xml-commons-resolver','None','giraffe/generic/xml-commons');
+INSERT INTO `projects` VALUES ('giraffe/generic/xml-xerces2/xml-xerces','xml-xerces','None','giraffe/generic/xml-xerces2');
+INSERT INTO `projects` VALUES ('giraffe/generic/xml-commons/xml-commons-which','xml-commons-which','None','giraffe/generic/xml-commons');
+INSERT INTO `projects` VALUES ('giraffe/generic/ant/ant','ant','None','giraffe/generic/ant');
+INSERT INTO `projects` VALUES ('giraffe/generic/xml-xerces2/dist-xerces','dist-xerces','None','giraffe/generic/xml-xerces2');
+INSERT INTO `projects` VALUES ('giraffe/generic/xml-xerces2/xml-xercesImpl','xml-xercesImpl','None','giraffe/generic/xml-xerces2');
+INSERT INTO `projects` VALUES ('giraffe/generic/java-xml-pack/jaxr','jaxr','None','giraffe/generic/java-xml-pack');
+INSERT INTO `projects` VALUES ('giraffe/generic/java-xml-pack/jaxm','jaxm','None','giraffe/generic/java-xml-pack');
+INSERT INTO `projects` VALUES ('giraffe/generic/java-xml-pack/jaxrpc','jaxrpc','None','giraffe/generic/java-xml-pack');
+INSERT INTO `projects` VALUES ('giraffe/gump3-test-fixture/gump-fixture-svn/gump-fixture-svn-project-1','gump-fixture-svn-project-1','None','giraffe/gump3-test-fixture/gump-fixture-svn');
+INSERT INTO `projects` VALUES ('giraffe/gump3-test-fixture/gump-fixture-svn/gump-fixture-svn-project-2','gump-fixture-svn-project-2','None','giraffe/gump3-test-fixture/gump-fixture-svn');
+INSERT INTO `projects` VALUES ('giraffe/gump3-test-fixture/gump-fixture-svn/gump-fixture-svn-project-3','gump-fixture-svn-project-3','None','giraffe/gump3-test-fixture/gump-fixture-svn');
+INSERT INTO `projects` VALUES ('giraffe/gump3-test-fixture/gump-fixture-svn/gump-fixture-svn-project-dir-management-1','gump-fixture-svn-project-dir-management-1','None','giraffe/gump3-test-fixture/gump-fixture-svn');
+INSERT INTO `projects` VALUES ('giraffe/gump3-test-fixture/gump-fixture-svn/gump-fixture-svn-project-ant-based-1','gump-fixture-svn-project-ant-based-1','None','giraffe/gump3-test-fixture/gump-fixture-svn');
+INSERT INTO `projects` VALUES ('giraffe/gump3-test-fixture/gump-fixture-svn/gump-fixture-svn-project-failure-1','gump-fixture-svn-project-failure-1','None','giraffe/gump3-test-fixture/gump-fixture-svn');
+INSERT INTO `projects` VALUES ('giraffe/gump3-test-fixture/gump-fixture-svn/gump-fixture-svn-project-prereq-failure-1','gump-fixture-svn-project-prereq-failure-1','None','giraffe/gump3-test-fixture/gump-fixture-svn');
+
+--
+-- Table structure for table `results`
+--
+
+CREATE TABLE `results` (
+  `id` int(2) NOT NULL default '0',
+  `name` varchar(32) NOT NULL default '',
+  `description` text,
+  PRIMARY KEY  (`id`)
+) TYPE=MyISAM;
+
+--
+-- Dumping data for table `results`
+--
+
+#INSERT INTO `results` VALUES (0,'success','This is the status of a successful project build');
+#INSERT INTO `results` VALUES (1,'failure','This is the status of a failed project build');
+#INSERT INTO `results` VALUES (2,'stalled','This is the status of a project that cannot build due to unsatisfied dependencies');
+
+--
+-- Table structure for table `runs`
+--
+
+CREATE TABLE `runs` (
+  `id` varchar(255) NOT NULL default '',
+  `start_time` datetime NOT NULL default '0000-00-00 00:00:00',
+  `end_time` datetime NOT NULL default '0000-00-00 00:00:00',
+  `workspace_id` varchar(255) NOT NULL default '',
+  `name` varchar(12) NOT NULL default '',
+  PRIMARY KEY  (`id`),
+  KEY `workspace_id` (`workspace_id`)
+) TYPE=MyISAM;
+
+--
+-- Dumping data for table `runs`
+--
+
+INSERT INTO `runs` VALUES ('giraffe/generic@200507051351','2005-07-05 13:51:54','2005-07-05 13:51:54','giraffe/generic','200507051351');
+INSERT INTO `runs` VALUES ('giraffe/gump3-test-fixture@200507051352','2005-07-05 13:52:11','2005-07-05 13:52:11','giraffe/gump3-test-fixture','200507051352');
+
+--
+-- Table structure for table `workspaces`
+--
+
+CREATE TABLE `workspaces` (
+  `id` varchar(255) NOT NULL default '0',
+  `name` varchar(32) NOT NULL default '',
+  `host` varchar(255) NOT NULL default '',
+  `description` tinytext,
+  PRIMARY KEY  (`id`),
+  KEY `host` (`host`)
+) TYPE=MyISAM;
+
+--
+-- Dumping data for table `workspaces`
+--
+
+INSERT INTO `workspaces` VALUES ('giraffe/generic','generic','giraffe','None');
+INSERT INTO `workspaces` VALUES ('giraffe/gump3-test-fixture','gump3-test-fixture','giraffe','None');
+

Modified: gump/branches/Gump3/pygump/python/gump/plugins/dynagumper.py
URL: http://svn.apache.org/viewcvs/gump/branches/Gump3/pygump/python/gump/plugins/dynagumper.py?rev=209265&r1=209264&r2=209265&view=diff
==============================================================================
--- gump/branches/Gump3/pygump/python/gump/plugins/dynagumper.py (original)
+++ gump/branches/Gump3/pygump/python/gump/plugins/dynagumper.py Tue Jul  5 05:06:27 2005
@@ -14,39 +14,113 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+"""This module provides a single plugin, the Dynagumper, which
+   is responsible for pushing data to the Dynagump database."""
+
 __copyright__ = "Copyright (c) 2004-2005 The Apache Software Foundation"
 __license__   = "http://www.apache.org/licenses/LICENSE-2.0"
 
 import platform
 import os
+import time
+from urllib import quote
 
+from gump.model import Dependency
+from gump.model.util import check_failure, check_skip
+from gump.model.util import get_failure_causes
 from gump.plugins import AbstractPlugin
+from gump.plugins.instrumentation import DEFAULT_TIME_FORMAT
 from gump.util.sysinfo import amount_of_memory
 from gump.util.sysinfo import amount_of_cpu_mhz
 from gump.util.sysinfo import number_of_cpus
 
+BASE_DESCRIPTOR_URI = ""
+
+def get_host():
+    (system, host, release, version, machine, processor) = platform.uname()
+    return host
+
+_build_id = 0
+def set_build_id(project,timeformat):
+    global _build_id
+    (run_start, run_end, run_name) = get_run_data(project.module.repository.workspace,timeformat)
+    run_uri = get_run_uri(project.module.repository.workspace, run_name)
+    project.build_id = "%s:%s" % (run_uri, _build_id)
+    _build_id = _build_id + 1
+
+def get_build_id(project):
+    return project.build_id
+
+# TODO: maybe cache these calculations on the model?? This is going to be
+# *a lot* of string operations
+
+def get_workspace_uri(workspace):
+    url = "%s%s/%s" % (BASE_DESCRIPTOR_URI, get_host(), workspace.name)
+    return url
+
+def get_run_data(workspace, timeformat):
+    (year,mon,day,hour,min,sec,wday,yday,isdst) = time.strptime(workspace.run_start, timeformat)
+    run_start = time.mktime((year,mon,day,hour,min,sec,wday,yday,isdst))
+    run_name = "%04d%02d%02d%02d%02d" % (year,mon,day,hour,min)
+    (year,mon,day,hour,min,sec,wday,yday,isdst) = time.strptime(workspace.run_end, timeformat)
+    run_end = time.mktime((year,mon,day,hour,min,sec,wday,yday,isdst))
+    return (run_start, run_end, run_name)
+
+def get_run_uri(workspace, name):
+    url = "%s@%s" % (get_workspace_uri(workspace), name)
+    return url
+
+def get_module_uri(module):
+    url = "%s/%s" % (get_workspace_uri(module.repository.workspace), module.name)
+    return url
+
+def get_project_uri(project):
+    url = "%s/%s" % (get_module_uri(project.module), project.name)
+    return url
+
+def get_project_version_uri(project,timeformat):
+    (run_start, run_end, run_name) = get_run_data(project.module.repository.workspace,timeformat)
+    url = "%s/%s" % (get_run_uri(project.module.repository.workspace, run_name), project.name)
+    return url
+
 class Dynagumper(AbstractPlugin):
     """
-    Populate the DynaGump run metadata database.    
+    Plugin to populate the DynaGump run metadata database. It should run
+    in the post-processing stage only, after the object model has been fully
+    decorated.
+    
+    In order to understand what this plugin does (or should do), it is important
+    to look at both the complete gump object model as implemented in python code
+    and at the SQL-based database model defined for Dynagump. The Dynagumper is
+    "nothing more" than a mapping between those two.
+    
+    Further dependencies:
+      - TimerPlugin that sets run_start on the workspace
+      - TimerPlugin that sets work_start and work_end on the projects
+        (can recover)
     """    
-    def __init__(self, db, log):
+    def __init__(self, db, log, timeformat=DEFAULT_TIME_FORMAT):
         AbstractPlugin.__init__(self,log)
         """Set up the Dynagumper.
 
         Arguments:
-            - db is an instance of a gump.util.Database.
-            - log is an instance of logging.Logger.
+            - db is the instance of gump.util.Database that we will be
+              using for all our database calls.
+            - log is an instance of logging.Logger that we barely use
+              (as the db can be responsible for logging all executed
+              statements).
         """
         self.db = db
         self.log = log
+        self.timeformat = timeformat
         
         (system, host, release, version, machine, processor) = platform.uname()
         self.host = host
         
     def initialize(self):
-        self.storeHost()
+        self.add_host_to_db()
     
-    def storeHost(self):
+    def add_host_to_db(self):
         """Adds information about this server to the hosts table."""
         (system, host, release, version, machine, processor) = platform.uname()
         tablename = "hosts"
@@ -72,17 +146,14 @@
                      WHERE address = '%s' AND name = '%s';""" \
                 % (tablename, processor, cpus, mhz, memory, description, host, host)
         self.db.execute(cmd)
-    
-    def visit_workspace(self, workspace):
-        """Add information about the workspace to the database."""
+
+    def _add_workspace_to_db(self, workspace):
         tablename = "workspaces"
+        id = get_workspace_uri(workspace)
         
-        cmd = "SELECT * FROM %s WHERE name = '%s' AND host = '%s';" % (tablename, workspace.name, self.host)
+        cmd = "SELECT * FROM %s WHERE id = '%s';" % (tablename, id)
         (rows, result) = self.db.execute(cmd)
         
-        #TODO For want of any other ID...
-        id = 'gump://%s@%s' % (workspace.name, self.host)
-        
         description = None
         if hasattr(workspace,'description'): description = workspace.description
         
@@ -99,51 +170,135 @@
                 % (tablename, id, description, workspace.name, self.host)
         self.db.execute(cmd)
     
-    def visit_module(self, module):    
-        """Add information about a module to the database."""
+    def _add_run_to_db(self, workspace):
+        tablename = "runs"
+        (run_start, run_end, run_name) = get_run_data(workspace,self.timeformat)
+        workspace_id = get_workspace_uri(workspace)
+        run_id = get_run_uri(workspace, run_name)
+
+        cmd = """INSERT INTO %s (id, start_time, end_time, workspace_id, name)
+                     VALUES ('%s', FROM_UNIXTIME(%s), FROM_UNIXTIME(%s), '%s', '%s')""" \
+                % (tablename, run_id, run_start, run_end, workspace_id, run_name)
+        self.db.execute(cmd)
+    
+    def _add_module_to_db(self, module):
         tablename = "modules"
         
-        cmd = "SELECT * FROM %s WHERE name = '%s';" % (tablename, module.name)
+        id = get_module_uri(module)
+
+        cmd = "SELECT * FROM %s WHERE id = '%s';" % (tablename, id)
         (rows, result) = self.db.execute(cmd)
                 
         # Store into database...
         if rows == 0:
             # Insert
-            cmd = """INSERT INTO %s (name, description, descriptor)
+            cmd = """INSERT INTO %s (name, description, id)
                      VALUES ('%s', '%s', '%s')""" \
-                % (tablename, module.name, module.description, module.url)
+                % (tablename, module.name, module.description, id)
         else:
             # Update
-            cmd = """UPDATE %s SET description='%s',descriptor='%s'
-                     WHERE name = '%s';""" \
-                % (tablename, module.description, module.url, module.name)
-        self.db.execute(cmd)
+            cmd = """UPDATE %s SET description='%s',name='%s'
+                     WHERE id = '%s';""" \
+                % (tablename, module.description, module.name, id)
+        self.db.execute(cmd)        
     
-    def visit_project(self, project):    
-        """Add information about a project to the database."""
+    def _add_project_to_db(self, project):
         tablename = "projects"
-        startdate = project.run_start
-        enddate = project.run_end
-        name = project.name
         
-        cmd = "SELECT * FROM %s WHERE name = '%s';" % (tablename, project.name)
+        id = get_project_uri(project)
+        module_id = get_module_uri(project.module)
+
+        cmd = "SELECT * FROM %s WHERE id = '%s';" % (tablename, id)
         (rows, result) = self.db.execute(cmd)
                 
         # Gather data
         description = None
         if hasattr(project,'description'): description = project.description
-        descriptor=None
-        if hasattr(project,'url'): descriptor = project.url
         
         # Store into database...
         if rows == 0:
             # Insert
-            cmd = """INSERT INTO %s (name, description, module, descriptor)
+            cmd = """INSERT INTO %s (name, description, module_id, id)
                      VALUES ('%s', '%s', '%s', '%s')""" \
-                % (tablename, project.name, description, project.module.name, descriptor)
+                % (tablename, project.name, description, module_id, id)
         else:
             # Update
-            cmd = """UPDATE %s SET description='%s',module='%s',descriptor='%s'
+            cmd = """UPDATE %s SET description='%s',module_id='%s',id='%s'
                      WHERE name = '%s';""" \
-                % (tablename, description, project.module.name, descriptor, project.name)
+                % (tablename, description, module_id, id, project.name)
+        self.db.execute(cmd)
+    
+    def _add_project_version_to_db(self, project):
+        tablename = "project_versions"
+        
+        id = get_project_version_uri(project,self.timeformat)
+        project_id = get_project_uri(project)
+
+        cmd = """INSERT INTO %s (id, project_id)
+                VALUES ('%s', '%s')""" \
+            % (tablename, id, project_id)
+        self.db.execute(cmd)
+
+    def _add_project_dependencies_to_db(self, project):
+        tablename = "project_dependencies"
+        cmd = """INSERT INTO """ + tablename + """ (dependee, dependant)
+                VALUES ('%s', '%s')"""
+        for relationship in project.dependencies:
+            dependee = get_project_version_uri(project,self.timeformat)
+            dependency = get_project_version_uri(relationship.dependency,self.timeformat)
+            self.db.execute( cmd % (dependee, dependency))
+
+    def _add_cause_to_db(self, project, problematic_dependency):
+        tablename = "causes"
+        build_id = get_build_id(project)
+        cause_id = get_project_version_uri(problematic_dependency.dependency, self.timeformat)
+        
+        cmd = """INSERT INTO %s (build_id, cause_id)
+                VALUES ('%s', '%s')""" \
+            % (tablename, build_id, cause_id)
         self.db.execute(cmd)
+        
+    def _add_result_to_db(self, project):
+        tablename = "builds"
+        state = 0
+        if check_skip(project):
+            state = 2
+
+        if check_failure(project):
+            state = 1
+            first_problem = get_failure_causes(project)[0]
+            if isinstance(first_problem, Dependency):
+                state = 2
+                self._add_cause_to_db(project, first_problem)
+        
+        id = get_project_version_uri(project,self.timeformat)
+        (run_start, run_end, run_name) = get_run_data(project.module.repository.workspace,self.timeformat)
+        run_id = get_run_uri(project.module.repository.workspace,run_name)
+        build_id = get_build_id(project)
+
+        work_start = getattr(project, "work_start", project.module.repository.workspace.run_start)
+        work_start = time.strptime(work_start, self.timeformat)
+        work_start = time.mktime(work_start)
+        
+        work_end = getattr(project, "work_end", project.module.repository.workspace.run_end)
+        work_end = time.strptime(work_end, self.timeformat)
+        work_end = time.mktime(work_end)
+
+        cmd = """INSERT INTO %s (id, run_id, project_version_id, start_time, end_time, result, log)
+                     VALUES ('%s', '%s', '%s', FROM_UNIXTIME(%s), FROM_UNIXTIME(%s), '%s', '%s')""" \
+                % (tablename, build_id, run_id, id, work_start, work_end, state, "Log saving still a TODO!") # TODO
+        self.db.execute(cmd)
+
+    def visit_workspace(self, workspace):
+        self._add_workspace_to_db(workspace)
+        self._add_run_to_db(workspace)
+    
+    def visit_module(self, module):    
+        self._add_module_to_db(module)
+    
+    def visit_project(self, project):
+        set_build_id(project,self.timeformat)
+        self._add_project_to_db(project)
+        self._add_project_version_to_db(project)
+        self._add_project_dependencies_to_db(project)
+        self._add_result_to_db(project)