/*==========================================================================*\ | $Id: GraderDatabaseUpdates.java,v 1.13 2012/06/06 18:43:56 stedwar2 Exp $ |*-------------------------------------------------------------------------*| | Copyright (C) 2006-2012 Virginia Tech | | This file is part of Web-CAT. | | Web-CAT is free software; you can redistribute it and/or modify | it under the terms of the GNU Affero General Public License as published | by the Free Software Foundation; either version 3 of the License, or | (at your option) any later version. | | Web-CAT is distributed in the hope that it will be useful, | but WITHOUT ANY WARRANTY; without even the implied warranty of | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | GNU General Public License for more details. | | You should have received a copy of the GNU Affero General Public License | along with Web-CAT; if not, see <http://www.gnu.org/licenses/>. \*==========================================================================*/ package org.webcat.grader; import java.sql.SQLException; import org.webcat.dbupdate.UpdateSet; // ------------------------------------------------------------------------- /** * This class captures the SQL database schema for the database tables * underlying the Grader subsystem and the Grader.eomodeld. Logging output * for this class uses its parent class' logger. * * @author Stephen Edwards * @author Last changed by $Author: stedwar2 $ * @version $Revision: 1.13 $, $Date: 2012/06/06 18:43:56 $ */ public class GraderDatabaseUpdates extends UpdateSet { //~ Constructors .......................................................... // ---------------------------------------------------------- /** * The default constructor uses the name "grader" as the unique * identifier for this subsystem and EOModel. */ public GraderDatabaseUpdates() { super("grader"); } //~ Public Methods ........................................................ // ---------------------------------------------------------- /** * Creates all tables in their baseline configuration, as needed. * @throws SQLException on error */ public void updateIncrement0() throws SQLException { createAssignmentTable(); createAssignmentOfferingTable(); createEnqueuedJobTable(); createGraderPrefsTable(); createGradingCriteriaTable(); createResultFileTable(); createUploadedScriptFilesTable(); createStepTable(); createStepConfigTable(); createSubmissionTable(); createSubmissionFileCommentTable(); createSubmissionFileStatsTable(); createSubmissionProfileTable(); createSubmissionResultTable(); } // ---------------------------------------------------------- /** * Adds columns for recording names and owners on step configurations. * @throws SQLException on error */ public void updateIncrement1() throws SQLException { database().executeSQL( "alter table TSTEPCONFIG add CAUTHORID INTEGER"); database().executeSQL( "alter table TSTEPCONFIG add CNAME TINYTEXT"); } // ---------------------------------------------------------- /** * This performs some simple column value maintenance to repair a * bug in an earlier Web-CAT version. It resets all the * updateMutableFields columns to all zeroes. * @throws SQLException on error */ public void updateIncrement2() throws SQLException { database().executeSQL( "UPDATE TSTEP SET CUPDATEMUTABLEFIELDS = 0"); database().executeSQL( "UPDATE TSTEPCONFIG SET CUPDATEMUTABLEFIELDS = 0"); database().executeSQL( "UPDATE TUPLOADEDSCRIPTFILES SET CUPDATEMUTABLEFIELDS = 0"); } // ---------------------------------------------------------- /** * Adds assignment graphing summary fields to assignment offerings. * @throws SQLException on error */ public void updateIncrement3() throws SQLException { database().executeSQL( "alter table TASSIGNMENTOFFERING add " + "CGRAPHSUMMARY BLOB"); database().executeSQL( "alter table TASSIGNMENTOFFERING add " + "CUPDATEMUTABLEFIELDS BIT NOT NULL"); } // ---------------------------------------------------------- /** * Adds support for storing parameters needed to publish submissions * for external submission engines. * @throws SQLException on error */ public void updateIncrement4() throws SQLException { database().executeSQL( "alter table TSUBMISSIONPROFILE add " + "CINCLUDEDFILEPATTERNS TEXT"); database().executeSQL( "alter table TSUBMISSIONPROFILE add " + "CEXCLUDEDFILEPATTERNS TEXT"); database().executeSQL( "alter table TSUBMISSIONPROFILE add " + "CREQUIREDFILEPATTERNS TEXT"); database().executeSQL( "alter table TSUBMISSIONPROFILE add " + "CSUBMISSIONMETHOD TINYINT NOT NULL"); } // ---------------------------------------------------------- /** * Adds support for global configuration parameters for plug-ins. * @throws SQLException on error */ public void updateIncrement5() throws SQLException { database().executeSQL( "alter table TUPLOADEDSCRIPTFILES add " + "CGLOBALCONFIGSETTINGS BLOB"); } // ---------------------------------------------------------- /** * Drop the unused hasSuspendedSubs attribute from AssignmentOffering. * @throws SQLException on error */ public void updateIncrement6() throws SQLException { database().executeSQL( "alter table TASSIGNMENTOFFERING drop " + "FHASSUSPENDEDSUBS"); } // ---------------------------------------------------------- /** * Drop the unused courseOfferingId attribute from GraderPrefs, and add * to Submission a field indicating whether it is the "submission for * grading." * @throws SQLException on error */ public void updateIncrement7() throws SQLException { database().executeSQL( "alter table TGRADERPREFS drop " + "CCOURSEOFFERINGID"); database().executeSQL( "alter table TSUBMISSION add " + "CISSUBMISSIONFORGRADING BIT"); database().executeSQL( "alter table TSUBMISSIONRESULT modify " + "CISMOSTRECENT BIT"); } // ---------------------------------------------------------- /** * Creates the TRESULTOUTCOME table. * @throws SQLException on error */ public void updateIncrement8() throws SQLException { if (!database().hasTable("TRESULTOUTCOME")) { log.info("creating table TRESULTOUTCOME"); database().executeSQL( "CREATE TABLE TRESULTOUTCOME " + "(OID INTEGER NOT NULL , CRESULTID INTEGER , " + "CSUBMISSIONID INTEGER , CINDEX INTEGER , CTAG TINYTEXT , " + "CCONTENTS BLOB , CUPDATEMUTABLEFIELDS BIT NOT NULL )"); database().executeSQL( "ALTER TABLE TRESULTOUTCOME ADD PRIMARY KEY (OID)"); } } // ---------------------------------------------------------- /** * Adds support for global configuration parameters for plug-ins. * @throws SQLException on error */ public void updateIncrement9() throws SQLException { database().executeSQL( "alter table TGRADERPREFS add " + "CASSIGNID INTEGER"); } // ---------------------------------------------------------- /** * Adds support for tagging files during grading. * @throws SQLException on error */ public void updateIncrement10() throws SQLException { database().executeSQL( "alter table TSUBMISSIONFILESTATS add " + "CTAGS TEXT"); } // ---------------------------------------------------------- /** * Adds fields for closing assignments and tracking opinions. * @throws SQLException on error */ public void updateIncrement11() throws SQLException { database().executeSQL( "alter table TASSIGNMENTOFFERING add " + "closedOnDate DATETIME"); database().executeSQL( "alter table TASSIGNMENT add " + "trackOpinions BIT NOT NULL"); } // ---------------------------------------------------------- /** * Adds fields for keeping track of the accumulated values for result * outcomes in a submission result. * @throws SQLException on error */ public void updateIncrement12() throws SQLException { database().executeSQL( "alter table TSUBMISSIONRESULT add " + "CUPDATEMUTABLEFIELDS BIT NOT NULL"); database().executeSQL( "alter table TSUBMISSIONRESULT add " + "accumulatedSavedProperties BLOB"); } // ---------------------------------------------------------- /** * Adds field for tracking assignment modification times. * @throws SQLException on error */ public void updateIncrement13() throws SQLException { database().executeSQL( "alter table TASSIGNMENTOFFERING add " + "lastModified DATETIME"); } // ---------------------------------------------------------- /** * Adds field for associating partnered submissions with a primary * submission. * @throws SQLException on error */ public void updateIncrement14() throws SQLException { database().executeSQL( "alter table TSUBMISSION add primarySubmissionId INTEGER"); database().executeSQL( "alter table TSUBMISSIONPROFILE add " + "allowPartners BIT NOT NULL"); } // ---------------------------------------------------------- /** * Add indexes for better performance. * @throws SQLException on error */ public void updateIncrement15() throws SQLException { // Indices for Assignment createIndexFor("TASSIGNMENT", "CAUTHORID"); // Indices for AssignmentOffering createIndexFor("TASSIGNMENTOFFERING", "CASSIGNMENTID"); createIndexFor("TASSIGNMENTOFFERING", "CCOURSEOFFERINGID"); createIndexFor("TASSIGNMENTOFFERING", "CDUEDATE"); // Indices for EnqueuedJob // None, since the queue is so short an index doesn't help much. // Indices for GraderPrefs createIndexFor("TGRADERPREFS", "CASSIGNID"); createIndexFor("TGRADERPREFS", "CASSIGNMENTID"); createIndexFor("TGRADERPREFS", "CSTEPID"); createIndexFor("TGRADERPREFS", "CSUBMISSIONFILESTATSID"); createIndexFor("TGRADERPREFS", "CSUBMISSIONID"); createIndexFor("TGRADERPREFS", "CUSERID"); // Indices for GradingCriteria createIndexFor("TGRADINGCRITERIA", "CUSERID"); // Indices for GradingPlugin createIndexFor("TUPLOADEDSCRIPTFILES", "CAUTHORID"); // Indices for ResultFile createIndexFor("TRESULTFILE", "CRESULTID"); // Indices for ResultOutcome createIndexFor("TRESULTOUTCOME", "CRESULTID"); createIndexFor("TRESULTOUTCOME", "CSUBMISSIONID"); // Indices for Step createIndexFor("TSTEP", "CASSIGNMENTID"); createIndexFor("TSTEP", "CSCRIPTID"); createIndexFor("TSTEP", "CSTEPCONFIGID"); // Indices for StepConfig createIndexFor("TSTEPCONFIG", "CAUTHORID"); // Indices for Submission createIndexFor("TSUBMISSION", "CASSIGNMENTID"); createIndexFor("TSUBMISSION", "primarySubmissionId"); createIndexFor("TSUBMISSION", "CRESULTID"); createIndexFor("TSUBMISSION", "CUSERID"); // Indices for SubmissionFileComment createIndexFor("TSUBMISSIONFILECOMMENT", "CAUTHORID"); createIndexFor("TSUBMISSIONFILECOMMENT", "CSUBMISSIONFILESTATSID"); // Indices for SubmissionFileStats createIndexFor("TSUBMISSIONFILESTATS", "CRESULTID"); // Indices for SubmissionProfile createIndexFor("TSUBMISSIONPROFILE", "CUSERID"); // Indices for SubmissionResult // None so far } // ---------------------------------------------------------- /** * Adds lastUpdated field to submission result table. * @throws SQLException on error */ public void updateIncrement16() throws SQLException { database().executeSQL( "alter table TSUBMISSIONRESULT add lastUpdated DATETIME"); } // ---------------------------------------------------------- /** * Adds studentReportStyleVersion and staffReportStyleVersion fields to * submission result table. * @throws SQLException on error */ public void updateIncrement17() throws SQLException { database().executeSQL( "alter table TSUBMISSIONRESULT add " + "studentReportStyleVersion INTEGER"); database().executeSQL( "alter table TSUBMISSIONRESULT add " + "staffReportStyleVersion INTEGER"); } // ---------------------------------------------------------- /** * Submission method is no longer used (will eventually be deleted), * so make it optional. * @throws SQLException on error */ public void updateIncrement18() throws SQLException { database().executeSQL( "alter table TSUBMISSIONPROFILE modify " + "CSUBMISSIONMETHOD TINYINT NOT NULL Default 0"); } // ---------------------------------------------------------- /** * Submission method is no longer used (will eventually be deleted), * so make it optional. * @throws SQLException on error */ public void updateIncrement19() throws SQLException { database().executeSQL( "alter table TUPLOADEDSCRIPTFILES add fileConfigSettings BLOB"); } // ---------------------------------------------------------- /** * Clear all values from isSubmissionForGrading so that all new * stuff will be migrated correctly. * @throws SQLException on error */ public void updateIncrement20() throws SQLException { database().executeSQL( "update TSUBMISSION set CISSUBMISSIONFORGRADING = NULL"); } // ---------------------------------------------------------- /** * Submission method is no longer used (will eventually be deleted), * so make it optional. * @throws SQLException on error */ public void updateIncrement21() throws SQLException { database().executeSQL( "alter table TSUBMISSIONRESULT modify " + "accumulatedSavedProperties LONGBLOB"); } // ---------------------------------------------------------- /** * Clear all values from isSubmissionForGrading so that all new * stuff will be migrated correctly. * @throws SQLException on error */ public void updateIncrement22() throws SQLException { database().executeSQL( "update TSUBMISSION set CISSUBMISSIONFORGRADING = NULL"); } //~ Private Methods ....................................................... // ---------------------------------------------------------- /** * Create the TASSIGNMENT table, if needed. * @throws SQLException on error */ private void createAssignmentTable() throws SQLException { if (!database().hasTable("TASSIGNMENT")) { log.info("creating table TASSIGNMENT"); database().executeSQL( "CREATE TABLE TASSIGNMENT " + "(CAUTHORID INTEGER , CFILEUPLOADMESSAGE TEXT , " + "CCOMPARISONGRADINGCRITERIAID INTEGER , " + "OID INTEGER NOT NULL, CMOODLEID INTEGER , " + "CASSIGNMENTNAME TINYTEXT , CRUBRICID INTEGER , " + "CASSIGNMENTDESCRIPTION TINYTEXT , " + "CGRADINGPROFILEID INTEGER , CASSIGNMENTURL TINYTEXT )"); database().executeSQL( "ALTER TABLE TASSIGNMENT ADD PRIMARY KEY (OID)"); } } // ---------------------------------------------------------- /** * Create the TASSIGNMENTOFFERING table, if needed. * @throws SQLException on error */ private void createAssignmentOfferingTable() throws SQLException { if (!database().hasTable("TASSIGNMENTOFFERING")) { log.info("creating table TASSIGNMENTOFFERING"); database().executeSQL( "CREATE TABLE TASSIGNMENTOFFERING " + "(CASSIGNMENTID INTEGER , CCOURSEOFFERINGID INTEGER , " + "CDUEDATE DATETIME , FGRADINGSUSPENDED BIT NOT NULL, " + "FHASSUSPENDEDSUBS BIT NOT NULL, OID INTEGER NOT NULL, " + "CMOODLEID INTEGER , CPUBLISH BIT NOT NULL)"); database().executeSQL( "ALTER TABLE TASSIGNMENTOFFERING ADD PRIMARY KEY (OID)"); } } // ---------------------------------------------------------- /** * Create the TENQUEUEDJOB table, if needed. * @throws SQLException on error */ private void createEnqueuedJobTable() throws SQLException { if (!database().hasTable("TENQUEUEDJOB")) { log.info("creating table TENQUEUEDJOB"); database().executeSQL( "CREATE TABLE TENQUEUEDJOB " + "(CDISCARDED BIT NOT NULL, OID INTEGER NOT NULL, " + "CPAUSED BIT NOT NULL, CQUEUETIME DATETIME , " + "CREGRADING BIT NOT NULL, CSUBMISSIONID INTEGER)"); database().executeSQL( "ALTER TABLE TENQUEUEDJOB ADD PRIMARY KEY (OID)"); } } // ---------------------------------------------------------- /** * Create the TGRADERPREFS table, if needed. * @throws SQLException on error */ private void createGraderPrefsTable() throws SQLException { if (!database().hasTable("TGRADERPREFS")) { log.info("creating table TGRADERPREFS"); database().executeSQL( "CREATE TABLE TGRADERPREFS " + "(CASSIGNMENTID INTEGER , CCOMMENTHISTORY MEDIUMTEXT , " + "CCOURSEOFFERINGID INTEGER , OID INTEGER NOT NULL, " + "CSTEPID INTEGER , CSUBMISSIONFILESTATSID INTEGER , " + "CSUBMISSIONID INTEGER , CUSERID INTEGER)"); database().executeSQL( "ALTER TABLE TGRADERPREFS ADD PRIMARY KEY (OID)"); } } // ---------------------------------------------------------- /** * Create the TGRADINGCRITERIA table, if needed. * @throws SQLException on error */ private void createGradingCriteriaTable() throws SQLException { if (!database().hasTable("TGRADINGCRITERIA")) { log.info("creating table TGRADINGCRITERIA"); database().executeSQL( "CREATE TABLE TGRADINGCRITERIA " + "(CBLANKLINEPT DOUBLE , CDEADTIMEDELTA BIGINT , " + "CDIFFLINESYNCING BIT NOT NULL, CEXTRALINEPT DOUBLE , " + "CFLOATCOMPARSIONSTYLE BIT NOT NULL, " + "CFLOATNEGATIVESTYLE DOUBLE , CFLOATPOSITIVESTYLE DOUBLE , " + "OID INTEGER NOT NULL, CIGNOREBLANKLINES BIT NOT NULL, " + "CIGNORECASE BIT NOT NULL, CIGNORENONPRINTING BIT NOT NULL, " + "CINGOREPUNCTUATION BIT NOT NULL, " + "CIGNOREWHITESPACE BIT NOT NULL, FPROFILENAME TINYTEXT , " + "CNOREMALIZEWHITESPACE BIT NOT NULL, " + "CPUNCTUATIONTOIGNORE MEDIUMTEXT , " + "CSTRINGCOMPARSIONSTYLE INTEGER , " + "CTOKENIZING_STYLE BIT NOT NULL, " + "CTRIMWHITESPACE BIT NOT NULL, CUSERID INTEGER)"); database().executeSQL( "ALTER TABLE TGRADINGCRITERIA ADD PRIMARY KEY (OID)"); } } // ---------------------------------------------------------- /** * Create the TRESULTFILE table, if needed. * @throws SQLException on error */ private void createResultFileTable() throws SQLException { if (!database().hasTable("TRESULTFILE")) { log.info("creating table TRESULTFILE"); database().executeSQL( "CREATE TABLE TRESULTFILE " + "(CREPORT TINYTEXT , OID INTEGER NOT NULL, " + "CLABEL TINYTEXT , TYPE TINYTEXT , CRESULTID INTEGER)"); database().executeSQL( "ALTER TABLE TRESULTFILE ADD PRIMARY KEY (OID)"); } } // ---------------------------------------------------------- /** * Create the TUPLOADEDSCRIPTFILES table, if needed. * @throws SQLException on error */ private void createUploadedScriptFilesTable() throws SQLException { if (!database().hasTable("TUPLOADEDSCRIPTFILES")) { log.info("creating table TUPLOADEDSCRIPTFILES"); database().executeSQL( "CREATE TABLE TUPLOADEDSCRIPTFILES " + "(CAUTHORID INTEGER , CCONFIGDESCRIPTION BLOB , " + "CDEFAULTCONFIGSETTINGS BLOB , OID INTEGER NOT NULL, " + "CISCONFIGFILE BIT NOT NULL, CISPUBLISHED BIT NOT NULL, " + "CLANGUAGEID INTEGER , CLASTMODIFIEDTIME DATETIME , " + "CMAINFILENAME TINYTEXT , CNAME TINYTEXT , " + "CSUBDIRNAME TINYTEXT , CUPDATEMUTABLEFIELDS BIT NOT NULL, " + "CUPLOADEDFILENAME TINYTEXT)"); database().executeSQL( "ALTER TABLE TUPLOADEDSCRIPTFILES ADD PRIMARY KEY (OID)"); } } // ---------------------------------------------------------- /** * Create the TSTEP table, if needed. * @throws SQLException on error */ private void createStepTable() throws SQLException { if (!database().hasTable("TSTEP")) { log.info("creating table TSTEP"); database().executeSQL( "CREATE TABLE TSTEP " + "(CASSIGNMENTID INTEGER , CCONFIGSETTINGS BLOB , " + "OID INTEGER NOT NULL, CORDER INTEGER , CSCRIPTID INTEGER , " + "CSTEPCONFIGID INTEGER , CTIMEOUT INTEGER , " + "CUPDATEMUTABLEFIELDS BIT NOT NULL)"); database().executeSQL( "ALTER TABLE TSTEP ADD PRIMARY KEY (OID)"); } } // ---------------------------------------------------------- /** * Create the TSTEPCONFIG table, if needed. * @throws SQLException on error */ private void createStepConfigTable() throws SQLException { if (!database().hasTable("TSTEPCONFIG")) { log.info("creating table TSTEPCONFIG"); database().executeSQL( "CREATE TABLE TSTEPCONFIG " + "(CCONFIGSETTINGS BLOB , OID INTEGER NOT NULL, " + "CUPDATEMUTABLEFIELDS BIT NOT NULL)"); database().executeSQL( "ALTER TABLE TSTEPCONFIG ADD PRIMARY KEY (OID)"); } } // ---------------------------------------------------------- /** * Create the TSUBMISSION table, if needed. * @throws SQLException on error */ private void createSubmissionTable() throws SQLException { if (!database().hasTable("TSUBMISSION")) { log.info("creating table TSUBMISSION"); database().executeSQL( "CREATE TABLE TSUBMISSION " + "(CASSIGNMENTID INTEGER , CFILENAME TINYTEXT , " + "OID INTEGER NOT NULL, CPARTNERLINK BIT NOT NULL, " + "CRESULTID INTEGER , CSUBMITNUMBER INTEGER , " + "CSUBMITTIME DATETIME , CUSERID INTEGER)"); database().executeSQL( "ALTER TABLE TSUBMISSION ADD PRIMARY KEY (OID)"); } } // ---------------------------------------------------------- /** * Create the TSUBMISSIONFILECOMMENT table, if needed. * @throws SQLException on error */ private void createSubmissionFileCommentTable() throws SQLException { if (!database().hasTable("TSUBMISSIONFILECOMMENT")) { log.info("creating table TSUBMISSIONFILECOMMENT"); database().executeSQL( "CREATE TABLE TSUBMISSIONFILECOMMENT " + "(CAUTHORID INTEGER , CCATEGORYNO TINYINT , " + "CDEDUCTION DOUBLE , CFILENAME TINYTEXT , " + "CGROUPNAME TINYTEXT , OID INTEGER NOT NULL, " + "CLIMITEXCEEDED BIT NOT NULL, CLINENO INTEGER , " + "CMESSAGE TEXT , CSUBMISSIONFILESTATSID INTEGER , " + "CTONO TINYINT)"); database().executeSQL( "ALTER TABLE TSUBMISSIONFILECOMMENT ADD PRIMARY KEY (OID)"); } } // ---------------------------------------------------------- /** * Create the TSUBMISSIONFILESTATS table, if needed. * @throws SQLException on error */ private void createSubmissionFileStatsTable() throws SQLException { if (!database().hasTable("TSUBMISSIONFILESTATS")) { log.info("creating table TSUBMISSIONFILESTATS"); database().executeSQL( "CREATE TABLE TSUBMISSIONFILESTATS " + "(CCLASSNAME TINYTEXT , CCONDITIONALS INTEGER , " + "CCONDITIONALSCOVERED INTEGER , CDEDUCTIONS DOUBLE , " + "CELEMENTS INTEGER , CELEMENTSCOVERED INTEGER , " + "OID INTEGER NOT NULL, CLOC INTEGER , " + "CMARKUPFILENAME TINYTEXT , CMETHODS INTEGER , " + "CMETHODSCOVERED INTEGER , CNCCLOC INTEGER , " + "CPKGNAME TINYTEXT , CREMARKS INTEGER , CRESULTID INTEGER , " + "CSOURCEFILENAME TINYTEXT , CSTATEMENTS INTEGER , " + "CSTATEMENTSCOVERED INTEGER , CSTATUS TINYINT)"); database().executeSQL( "ALTER TABLE TSUBMISSIONFILESTATS ADD PRIMARY KEY (OID)"); } } // ---------------------------------------------------------- /** * Create the TSUBMISSIONPROFILE table, if needed. * @throws SQLException on error */ private void createSubmissionProfileTable() throws SQLException { if (!database().hasTable("TSUBMISSIONPROFILE")) { log.info("creating table TSUBMISSIONPROFILE"); database().executeSQL( "CREATE TABLE TSUBMISSIONPROFILE " + "(CAVAILABLEPOINTS DOUBLE , CAVAILABLETIMEDELTA BIGINT , " + "FAWARDEARLYBONUS BIT NOT NULL, CDEADTIMEDELTA BIGINT , " + "FDEDUCTLATEPENALTY BIT NOT NULL, " + "CEARLYBONUSMAXPTS DOUBLE , CEARLYBONUSUNITPTS DOUBLE , " + "CEARLYBONUSUNITTIME BIGINT , OID INTEGER NOT NULL, " + "CLATEPENALTYMAXPTS DOUBLE , CLATEPENALTYUNITPTS DOUBLE , " + "CLATEPENALTYUNITTIME BIGINT , CMAXFILEUPLOADSIZE BIGINT , " + "CMAXSUBMITS INTEGER , FPROFILENAME TINYTEXT , " + "CSCOREFORMAT TINYTEXT , CTAPOINTS DOUBLE , " + "CTOOLPOINTS DOUBLE , CUSERID INTEGER)"); database().executeSQL( "ALTER TABLE TSUBMISSIONPROFILE ADD PRIMARY KEY (OID)"); } } // ---------------------------------------------------------- /** * Create the TSUBMISSIONRESULT table, if needed. * @throws SQLException on error */ private void createSubmissionResultTable() throws SQLException { if (!database().hasTable("TSUBMISSIONRESULT")) { log.info("creating table TSUBMISSIONRESULT"); database().executeSQL( "CREATE TABLE TSUBMISSIONRESULT " + "(CCOMMENTFORMAT TINYINT , CCOMMENTS MEDIUMTEXT , " + "CCORRECTNESSSCORE DOUBLE , OID INTEGER NOT NULL, " + "CISMOSTRECENT BIT NOT NULL, CSTATELEMENTSLABEL TINYTEXT , " + "CSTATUS TINYINT , CTASCORE DOUBLE , CTOOLSCORE DOUBLE)"); database().executeSQL( "ALTER TABLE TSUBMISSIONRESULT ADD PRIMARY KEY (OID)"); } } }