/*
 * Copyright (c) 1998, 2018 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0,
 * or the Eclipse Distribution License v. 1.0 which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
 */

// Contributors:
//     Oracle - initial API and implementation from Oracle TopLink
//     02/20/2009-1.1 Guy Pelletier
//       - 259829: TABLE_PER_CLASS with abstract classes does not work
//     12/18/2009-2.1 Guy Pelletier
//       - 211323: Add class extractor support to the EclipseLink-ORM.XML Schema
//     01/26/2011-2.3 Guy Pelletier
//       - 307664:  Lifecycle callbacks not called for object from IndirectSet
package org.eclipse.persistence.testing.models.jpa.inheritance;

import org.eclipse.persistence.sessions.DatabaseSession;
import org.eclipse.persistence.testing.framework.TogglingFastTableCreator;
import org.eclipse.persistence.tools.schemaframework.*;

/**
 * This class was generated by the TopLink table creator generator.
 * It stores the meta-data (tables) that define the database schema.
 * @see org.eclipse.persistence.sessions.factories.TableCreatorClassGenerator
 */
public class InheritanceTableCreator extends TogglingFastTableCreator {
    public InheritanceTableCreator() {
        setName("EJB3InheritanceProject");

        addTableDefinition(buildBICYCLETable());
        addTableDefinition(buildBOATTable());
        addTableDefinition(buildBUS_TIRETable());
        addTableDefinition(buildBUSTable());
        addTableDefinition(buildCOMPANYTable());
        addTableDefinition(buildFUEL_VEHTable());
        addTableDefinition(buildNONFUEL_VEHTable());
        addTableDefinition(buildSPORTSCARTable());
        addTableDefinition(buildJALOPYTable());
        addTableDefinition(buildVEHICLETable());
        addTableDefinition(buildVEHICLE_DIRECTORYTable());
        addTableDefinition(buildPERSONTable());
        addTableDefinition(buildENGINEERTable());
        addTableDefinition(buildTIREINFOTable());
        addTableDefinition(buildOFFROADTIREINFOTable());
        addTableDefinition(buildMUDTIREINFOTable());
        addTableDefinition(buildTIRERATINGCOMMENTTable());
        addTableDefinition(buildROCKTIREINFOTable());
        addTableDefinition(buildAAATable());
        addTableDefinition(buildAAA_STRINGSETTable());
        addTableDefinition(buildBBBTable());
        addTableDefinition(buildCCCTable());
        addTableDefinition(buildDDDTable());
        addTableDefinition(buildCOMPUTERTable());
        addTableDefinition(buildDESKTOPTable());
        addTableDefinition(buildENGINEER_DESKTOPTable());
        addTableDefinition(buildLAPTOPTable());
        addTableDefinition(buildENGINEER_LAPTOPTable());

        // Table per class testing, all tables prefixed with TPC_
        addTableDefinition(buildWEAPONTable());
        addTableDefinition(buildDIRECTWEAPONTable());
        addTableDefinition(buildINDIRECTWEAPONTable());
        addTableDefinition(buildGUNTable());
        addTableDefinition(buildKNIFETable());
        addTableDefinition(buildPOISONTable());
        addTableDefinition(buildBOMBTable());
        addTableDefinition(buildELIMINATIONTable());
        addTableDefinition(buildDIRECTELIMINATIONTable());
        addTableDefinition(buildINDIRECTELIMINATIONTable());
        addTableDefinition(buildCONTRACTEDPERSONELTable());
        addTableDefinition(buildASSASSINTable());
        addTableDefinition(buildSPECIALASSASSINTable());
        addTableDefinition(buildSOCIALCLUBTable());
        addTableDefinition(buildPERSONELCLUBTable());
        addTableDefinition(buildSMALLASSIGNMENTTable());
        addTableDefinition(buildNICKNAMESTable());

        addTableDefinition(buildAPPLETable());
        addTableDefinition(buildMACBOOKTable());
        addTableDefinition(buildMACBOOKPROTable());

        // bug 396587
        addTableDefinition(buildTPC_SUPERCLASSTable());
        addTableDefinition(buildTPC_SUBCLASSTable());
        addTableDefinition(buildJOINED_SUPERCLASSTable());
        addTableDefinition(buildJOINED_SUBCLASSTable());
        addTableDefinition(buildSTI_SUPERCLASSTable());

        // Bug 404071
        addTableDefinition(buildCMP3_SEEDTable());
        addTableDefinition(buildCMP3_SEEDED_FRUITTable());
        addTableDefinition(buildCMP3_CITRUS_FRUITTable());

        // Bug 458177
        addTableDefinition(buildJPA_FISHTable());
        addTableDefinition(buildJPA_BETTATable());
        addTableDefinition(buildJPA_FISH_TANKTable());
        // Bug 355721
        addTableDefinition(buildJPA_PET_STORETable());
    }

    public TableDefinition buildSTI_SUPERCLASSTable() {
        TableDefinition table = new TableDefinition();
        table.setName("JPA_STI_SUPERCLASS");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldCLASSTYPE = new FieldDefinition();
        fieldCLASSTYPE.setName("CLASSTYPE");
        fieldCLASSTYPE.setTypeName("VARCHAR2");
        fieldCLASSTYPE.setSize(3);
        fieldCLASSTYPE.setSubSize(0);
        fieldCLASSTYPE.setIsPrimaryKey(false);
        fieldCLASSTYPE.setIsIdentity(false);
        fieldCLASSTYPE.setUnique(false);
        fieldCLASSTYPE.setShouldAllowNull(false);
        table.addField(fieldCLASSTYPE);

        FieldDefinition fieldSUPERCLASS_ATTRIBUTE = new FieldDefinition();
        fieldSUPERCLASS_ATTRIBUTE.setName("SUPERCLASS_ATTRIBUTE");
        fieldSUPERCLASS_ATTRIBUTE.setTypeName("VARCHAR2");
        fieldSUPERCLASS_ATTRIBUTE.setSize(64);
        fieldSUPERCLASS_ATTRIBUTE.setSubSize(0);
        fieldSUPERCLASS_ATTRIBUTE.setIsPrimaryKey(false);
        fieldSUPERCLASS_ATTRIBUTE.setIsIdentity(false);
        fieldSUPERCLASS_ATTRIBUTE.setUnique(false);
        fieldSUPERCLASS_ATTRIBUTE.setShouldAllowNull(false);
        table.addField(fieldSUPERCLASS_ATTRIBUTE);

        FieldDefinition fieldSUBCLASS_ATTRIBUTE = new FieldDefinition();
        fieldSUBCLASS_ATTRIBUTE.setName("SUBCLASS_ATTRIBUTE");
        fieldSUBCLASS_ATTRIBUTE.setTypeName("VARCHAR2");
        fieldSUBCLASS_ATTRIBUTE.setSize(64);
        fieldSUBCLASS_ATTRIBUTE.setSubSize(0);
        fieldSUBCLASS_ATTRIBUTE.setIsPrimaryKey(false);
        fieldSUBCLASS_ATTRIBUTE.setIsIdentity(false);
        fieldSUBCLASS_ATTRIBUTE.setUnique(false);
        fieldSUBCLASS_ATTRIBUTE.setShouldAllowNull(true);
        table.addField(fieldSUBCLASS_ATTRIBUTE);

        return table;
    }

    public TableDefinition buildJOINED_SUPERCLASSTable() {
        TableDefinition table = new TableDefinition();
        table.setName("JPA_JOINED_SUPERCLASS");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldCLASSTYPE = new FieldDefinition();
        fieldCLASSTYPE.setName("CLASSTYPE");
        fieldCLASSTYPE.setTypeName("VARCHAR2");
        fieldCLASSTYPE.setSize(3);
        fieldCLASSTYPE.setSubSize(0);
        fieldCLASSTYPE.setIsPrimaryKey(false);
        fieldCLASSTYPE.setIsIdentity(false);
        fieldCLASSTYPE.setUnique(false);
        fieldCLASSTYPE.setShouldAllowNull(false);
        table.addField(fieldCLASSTYPE);

        FieldDefinition fieldSUPERCLASS_ATTRIBUTE = new FieldDefinition();
        fieldSUPERCLASS_ATTRIBUTE.setName("SUPERCLASS_ATTRIBUTE");
        fieldSUPERCLASS_ATTRIBUTE.setTypeName("VARCHAR2");
        fieldSUPERCLASS_ATTRIBUTE.setSize(64);
        fieldSUPERCLASS_ATTRIBUTE.setSubSize(0);
        fieldSUPERCLASS_ATTRIBUTE.setIsPrimaryKey(false);
        fieldSUPERCLASS_ATTRIBUTE.setIsIdentity(false);
        fieldSUPERCLASS_ATTRIBUTE.setUnique(false);
        fieldSUPERCLASS_ATTRIBUTE.setShouldAllowNull(false);
        table.addField(fieldSUPERCLASS_ATTRIBUTE);

        return table;
    }

    public TableDefinition buildJOINED_SUBCLASSTable() {
        TableDefinition table = new TableDefinition();
        table.setName("JPA_JOINED_SUBCLASS");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldSUBCLASS_ATTRIBUTE = new FieldDefinition();
        fieldSUBCLASS_ATTRIBUTE.setName("SUBCLASS_ATTRIBUTE");
        fieldSUBCLASS_ATTRIBUTE.setTypeName("VARCHAR2");
        fieldSUBCLASS_ATTRIBUTE.setSize(64);
        fieldSUBCLASS_ATTRIBUTE.setSubSize(0);
        fieldSUBCLASS_ATTRIBUTE.setIsPrimaryKey(false);
        fieldSUBCLASS_ATTRIBUTE.setIsIdentity(false);
        fieldSUBCLASS_ATTRIBUTE.setUnique(false);
        fieldSUBCLASS_ATTRIBUTE.setShouldAllowNull(true);
        table.addField(fieldSUBCLASS_ATTRIBUTE);

        ForeignKeyConstraint fkConstraint = new ForeignKeyConstraint();
        fkConstraint.setName("JPA_JOINED_SUBCLASS_FK1");
        fkConstraint.setTargetTable("JPA_JOINED_SUPERCLASS");
        fkConstraint.addSourceField("ID");
        fkConstraint.addTargetField("ID");
        table.addForeignKeyConstraint(fkConstraint);

        return table;
    }

    public TableDefinition buildTPC_SUPERCLASSTable() {
        TableDefinition table = new TableDefinition();
        table.setName("JPA_TPC_SUPERCLASS");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldSUPERCLASS_ATTRIBUTE = new FieldDefinition();
        fieldSUPERCLASS_ATTRIBUTE.setName("SUPERCLASS_ATTRIBUTE");
        fieldSUPERCLASS_ATTRIBUTE.setTypeName("VARCHAR2");
        fieldSUPERCLASS_ATTRIBUTE.setSize(64);
        fieldSUPERCLASS_ATTRIBUTE.setSubSize(0);
        fieldSUPERCLASS_ATTRIBUTE.setIsPrimaryKey(false);
        fieldSUPERCLASS_ATTRIBUTE.setIsIdentity(false);
        fieldSUPERCLASS_ATTRIBUTE.setUnique(false);
        fieldSUPERCLASS_ATTRIBUTE.setShouldAllowNull(false);
        table.addField(fieldSUPERCLASS_ATTRIBUTE);

        return table;
    }

    public TableDefinition buildTPC_SUBCLASSTable() {
        TableDefinition table = new TableDefinition();
        table.setName("JPA_TPC_SUBCLASS");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldSUPERCLASS_ATTRIBUTE = new FieldDefinition();
        fieldSUPERCLASS_ATTRIBUTE.setName("SUPERCLASS_ATTRIBUTE");
        fieldSUPERCLASS_ATTRIBUTE.setTypeName("VARCHAR2");
        fieldSUPERCLASS_ATTRIBUTE.setSize(64);
        fieldSUPERCLASS_ATTRIBUTE.setSubSize(0);
        fieldSUPERCLASS_ATTRIBUTE.setIsPrimaryKey(false);
        fieldSUPERCLASS_ATTRIBUTE.setIsIdentity(false);
        fieldSUPERCLASS_ATTRIBUTE.setUnique(false);
        fieldSUPERCLASS_ATTRIBUTE.setShouldAllowNull(false);
        table.addField(fieldSUPERCLASS_ATTRIBUTE);

        FieldDefinition fieldSUBCLASS_ATTRIBUTE = new FieldDefinition();
        fieldSUBCLASS_ATTRIBUTE.setName("SUBCLASS_ATTRIBUTE");
        fieldSUBCLASS_ATTRIBUTE.setTypeName("VARCHAR2");
        fieldSUBCLASS_ATTRIBUTE.setSize(64);
        fieldSUBCLASS_ATTRIBUTE.setSubSize(0);
        fieldSUBCLASS_ATTRIBUTE.setIsPrimaryKey(false);
        fieldSUBCLASS_ATTRIBUTE.setIsIdentity(false);
        fieldSUBCLASS_ATTRIBUTE.setUnique(false);
        fieldSUBCLASS_ATTRIBUTE.setShouldAllowNull(true);
        table.addField(fieldSUBCLASS_ATTRIBUTE);

        return table;
    }

    public TableDefinition buildAPPLETable() {
        TableDefinition table = new TableDefinition();
        table.setName("JPA_APPLE");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        return table;
    }

    public TableDefinition buildMACBOOKTable() {
        TableDefinition table = new TableDefinition();
        table.setName("JPA_MACBOOK");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        fieldID.setForeignKeyFieldName("JPA_APPLE.ID");
        table.addField(fieldID);

        FieldDefinition fieldRAM = new FieldDefinition();
        fieldRAM.setName("RAM");
        fieldRAM.setTypeName("NUMBER");
        fieldRAM.setSize(10);
        fieldRAM.setSubSize(0);
        fieldRAM.setIsPrimaryKey(false);
        fieldRAM.setIsIdentity(false);
        fieldRAM.setUnique(false);
        fieldRAM.setShouldAllowNull(true);
        table.addField(fieldRAM);

        return table;
    }

    public TableDefinition buildMACBOOKPROTable() {
        TableDefinition table = new TableDefinition();
        table.setName("JPA_MACBOOK_PRO");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        fieldID.setForeignKeyFieldName("JPA_MACBOOK.ID");
        table.addField(fieldID);

        FieldDefinition fieldCOLOR = new FieldDefinition();
        fieldCOLOR.setName("COLOR");
        fieldCOLOR.setTypeName("VARCHAR2");
        fieldCOLOR.setSize(10);
        fieldCOLOR.setSubSize(0);
        fieldCOLOR.setIsPrimaryKey(false);
        fieldCOLOR.setIsIdentity(false);
        fieldCOLOR.setUnique(false);
        fieldCOLOR.setShouldAllowNull(true);
        table.addField(fieldCOLOR);

        return table;
    }

    public TableDefinition buildBICYCLETable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_BICYCLE");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        fieldID.setForeignKeyFieldName("CMP3_NONFUEL_VEH.ID");
        table.addField(fieldID);

        FieldDefinition fieldDESCRIP = new FieldDefinition();
        fieldDESCRIP.setName("DESCRIP");
        fieldDESCRIP.setTypeName("VARCHAR2");
        fieldDESCRIP.setSize(10);
        fieldDESCRIP.setSubSize(0);
        fieldDESCRIP.setIsPrimaryKey(false);
        fieldDESCRIP.setIsIdentity(false);
        fieldDESCRIP.setUnique(false);
        fieldDESCRIP.setShouldAllowNull(true);
        table.addField(fieldDESCRIP);

        return table;
    }

    public TableDefinition buildBOATTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_BOAT");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("BOAT_ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        fieldID.setForeignKeyFieldName("CMP3_NONFUEL_VEH.ID");
        table.addField(fieldID);

        FieldDefinition fieldMODEL = new FieldDefinition();
        fieldMODEL.setName("MODEL");
        fieldMODEL.setTypeName("VARCHAR2");
        fieldMODEL.setSize(10);
        fieldMODEL.setSubSize(0);
        fieldMODEL.setIsPrimaryKey(false);
        fieldMODEL.setIsIdentity(false);
        fieldMODEL.setUnique(false);
        fieldMODEL.setShouldAllowNull(true);
        table.addField(fieldMODEL);

        return table;
    }

    public TableDefinition buildBUS_TIRETable(){
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_BUS_CMP3_TIRE");

        FieldDefinition fieldBusID = new FieldDefinition();
        fieldBusID.setName("Bus_ID");
        fieldBusID.setTypeName("NUMBER");
        fieldBusID.setSize(15);
        fieldBusID.setSubSize(0);
        fieldBusID.setIsPrimaryKey(true);
        fieldBusID.setIsIdentity(false);
        fieldBusID.setUnique(false);
        fieldBusID.setShouldAllowNull(false);
        fieldBusID.setForeignKeyFieldName("CMP3_BUS.BUS_ID");
        table.addField(fieldBusID);

        FieldDefinition fieldTireID = new FieldDefinition();
        fieldTireID.setName("tires_ID");
        fieldTireID.setTypeName("NUMBER");
        fieldTireID.setSize(15);
        fieldTireID.setSubSize(0);
        fieldTireID.setIsPrimaryKey(true);
        fieldTireID.setIsIdentity(false);
        fieldTireID.setUnique(false);
        fieldTireID.setShouldAllowNull(false);
        fieldTireID.setForeignKeyFieldName("CMP3_TIRE.ID");
        table.addField(fieldTireID);

        return table;
    }

    public TableDefinition buildBUSTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_BUS");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("BUS_ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        fieldID.setForeignKeyFieldName("CMP3_FUEL_VEH.ID");
        table.addField(fieldID);

        FieldDefinition fieldDRIVER_ID = new FieldDefinition();
        fieldDRIVER_ID.setName("DRIVER_ID");
        fieldDRIVER_ID.setTypeName("NUMBER");
        fieldDRIVER_ID.setSize(15);
        fieldDRIVER_ID.setSubSize(0);
        fieldDRIVER_ID.setIsPrimaryKey(false);
        fieldDRIVER_ID.setIsIdentity(false);
        fieldDRIVER_ID.setUnique(false);
        fieldDRIVER_ID.setShouldAllowNull(true);
        table.addField(fieldDRIVER_ID);

        ForeignKeyConstraint foreignKeyBUS_PERSON = new ForeignKeyConstraint();
        foreignKeyBUS_PERSON.setName("BUSDRIVER_ID");
        foreignKeyBUS_PERSON.setTargetTable("CMP3_PERSON");
        foreignKeyBUS_PERSON.addSourceField("DRIVER_ID");
        foreignKeyBUS_PERSON.addTargetField("ID");
        table.addForeignKeyConstraint(foreignKeyBUS_PERSON);

        return table;
    }

    public TableDefinition buildROCKTIREINFOTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_ROCK_TIRE");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        fieldID.setForeignKeyFieldName("CMP3_OFFROAD_TIRE.ID");
        table.addField(fieldID);

        FieldDefinition fieldGRIP = new FieldDefinition();
        fieldGRIP.setName("GRIP");
        fieldGRIP.setTypeName("NUMBER");
        fieldGRIP.setSize(15);
        fieldGRIP.setSubSize(0);
        fieldGRIP.setIsPrimaryKey(false);
        fieldGRIP.setIsIdentity(false);
        fieldGRIP.setUnique(false);
        fieldGRIP.setShouldAllowNull(true);
        table.addField(fieldGRIP);

        return table;
    }

    public TableDefinition buildSPORTSCARTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_SPORTS_CAR");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        fieldID.setForeignKeyFieldName("CMP3_FUEL_VEH.ID");
        table.addField(fieldID);

        FieldDefinition fieldFUEL_CAP = new FieldDefinition();
        fieldFUEL_CAP.setName("MAX_SPEED");
        fieldFUEL_CAP.setTypeName("NUMBER");
        fieldFUEL_CAP.setSize(10);
        fieldFUEL_CAP.setSubSize(0);
        fieldFUEL_CAP.setIsPrimaryKey(false);
        fieldFUEL_CAP.setIsIdentity(false);
        fieldFUEL_CAP.setUnique(false);
        fieldFUEL_CAP.setShouldAllowNull(true);
        table.addField(fieldFUEL_CAP);

        return table;
    }

    public TableDefinition buildJALOPYTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_JALOPY");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        fieldID.setForeignKeyFieldName("CMP3_FUEL_VEH.ID");
        table.addField(fieldID);

        FieldDefinition fieldRUST = new FieldDefinition();
        fieldRUST.setName("PERCENTRUST");
        fieldRUST.setTypeName("NUMBER");
        fieldRUST.setSize(10);
        fieldRUST.setSubSize(0);
        fieldRUST.setIsPrimaryKey(false);
        fieldRUST.setIsIdentity(false);
        fieldRUST.setUnique(false);
        fieldRUST.setShouldAllowNull(true);
        table.addField(fieldRUST);

        return table;
    }
    public TableDefinition buildCOMPANYTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_COMPANY");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldNAME = new FieldDefinition();
        fieldNAME.setName("NAME");
        fieldNAME.setTypeName("VARCHAR2");
        fieldNAME.setSize(100);
        fieldNAME.setSubSize(0);
        fieldNAME.setIsPrimaryKey(false);
        fieldNAME.setIsIdentity(false);
        fieldNAME.setUnique(false);
        fieldNAME.setShouldAllowNull(false);
        table.addField(fieldNAME);

        return table;
    }

    public TableDefinition buildFUEL_VEHTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_FUEL_VEH");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        fieldID.setForeignKeyFieldName("CMP3_VEHICLE.ID");
        table.addField(fieldID);

        FieldDefinition fieldDESCRIP = new FieldDefinition();
        fieldDESCRIP.setName("DESCRIP");
        fieldDESCRIP.setTypeName("VARCHAR2");
        fieldDESCRIP.setSize(30);
        fieldDESCRIP.setSubSize(0);
        fieldDESCRIP.setIsPrimaryKey(false);
        fieldDESCRIP.setIsIdentity(false);
        fieldDESCRIP.setUnique(false);
        fieldDESCRIP.setShouldAllowNull(true);
        table.addField(fieldDESCRIP);

        FieldDefinition fieldFUEL_CAP = new FieldDefinition();
        fieldFUEL_CAP.setName("FUEL_CAP");
        fieldFUEL_CAP.setTypeName("NUMBER");
        fieldFUEL_CAP.setSize(10);
        fieldFUEL_CAP.setSubSize(0);
        fieldFUEL_CAP.setIsPrimaryKey(false);
        fieldFUEL_CAP.setIsIdentity(false);
        fieldFUEL_CAP.setUnique(false);
        fieldFUEL_CAP.setShouldAllowNull(true);
        table.addField(fieldFUEL_CAP);

        FieldDefinition fieldFUEL_TYP = new FieldDefinition();
        fieldFUEL_TYP.setName("FUEL_TYP");
        fieldFUEL_TYP.setTypeName("VARCHAR2");
        fieldFUEL_TYP.setSize(30);
        fieldFUEL_TYP.setSubSize(0);
        fieldFUEL_TYP.setIsPrimaryKey(false);
        fieldFUEL_TYP.setIsIdentity(false);
        fieldFUEL_TYP.setUnique(false);
        fieldFUEL_TYP.setShouldAllowNull(true);
        table.addField(fieldFUEL_TYP);

        FieldDefinition fieldCOLOUR = new FieldDefinition();
        fieldCOLOUR.setName("COLOUR");
        fieldCOLOUR.setTypeName("VARCHAR2");
        fieldCOLOUR.setSize(20);
        fieldCOLOUR.setSubSize(0);
        fieldCOLOUR.setIsPrimaryKey(false);
        fieldCOLOUR.setIsIdentity(false);
        fieldCOLOUR.setUnique(false);
        fieldCOLOUR.setShouldAllowNull(true);
        table.addField(fieldCOLOUR);

        return table;
    }

    public TableDefinition buildMUDTIREINFOTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_MUD_TIRE");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        fieldID.setForeignKeyFieldName("CMP3_OFFROAD_TIRE.ID");
        table.addField(fieldID);

        FieldDefinition fieldTREAD = new FieldDefinition();
        fieldTREAD.setName("TREAD_DEPTH");
        fieldTREAD.setTypeName("NUMBER");
        fieldTREAD.setSize(15);
        fieldTREAD.setSubSize(0);
        fieldTREAD.setIsPrimaryKey(false);
        fieldTREAD.setIsIdentity(false);
        fieldTREAD.setUnique(false);
        fieldTREAD.setShouldAllowNull(true);
        table.addField(fieldTREAD);

        FieldDefinition fieldRATING = new FieldDefinition();
        fieldRATING.setName("RATING");
        fieldRATING.setTypeName("VARCHAR2");
        fieldRATING.setSize(20);
        fieldRATING.setSubSize(0);
        fieldRATING.setIsPrimaryKey(false);
        fieldRATING.setIsIdentity(false);
        fieldRATING.setUnique(false);
        fieldRATING.setShouldAllowNull(true);
        table.addField(fieldRATING);

        FieldDefinition fieldCOMMENT = new FieldDefinition();
        fieldCOMMENT.setName("COMMENT_ID");
        fieldCOMMENT.setTypeName("NUMBER");
        fieldCOMMENT.setSize(15);
        fieldCOMMENT.setSubSize(0);
        fieldCOMMENT.setShouldAllowNull(true);
        fieldCOMMENT.setIsPrimaryKey(false);
        fieldCOMMENT.setIsIdentity(false);
        fieldCOMMENT.setUnique(false);
        fieldCOMMENT.setForeignKeyFieldName("CMP3_TIRE_RATING_COMMENT.ID");
        table.addField(fieldCOMMENT);

        return table;
    }

    public TableDefinition buildTIRERATINGCOMMENTTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_TIRE_RATING_COMMENT");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldDESCRIP = new FieldDefinition();
        fieldDESCRIP.setName("DESCRIP");
        fieldDESCRIP.setTypeName("VARCHAR2");
        fieldDESCRIP.setSize(100);
        fieldDESCRIP.setSubSize(0);
        fieldDESCRIP.setIsPrimaryKey(false);
        fieldDESCRIP.setIsIdentity(false);
        fieldDESCRIP.setUnique(false);
        fieldDESCRIP.setShouldAllowNull(true);
        table.addField(fieldDESCRIP);

        return table;
    }

    public TableDefinition buildNONFUEL_VEHTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_NONFUEL_VEH");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        fieldID.setForeignKeyFieldName("CMP3_VEHICLE.ID");
        table.addField(fieldID);

        FieldDefinition fieldCOLOR = new FieldDefinition();
        fieldCOLOR.setName("COLOR");
        fieldCOLOR.setTypeName("VARCHAR2");
        fieldCOLOR.setSize(20);
        fieldCOLOR.setSubSize(0);
        fieldCOLOR.setIsPrimaryKey(false);
        fieldCOLOR.setIsIdentity(false);
        fieldCOLOR.setUnique(false);
        fieldCOLOR.setShouldAllowNull(true);
        table.addField(fieldCOLOR);

        return table;
    }

    public TableDefinition buildENGINEERTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_ENGINEER");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        fieldID.setForeignKeyFieldName("CMP3_PERSON.ID");
        table.addField(fieldID);

        FieldDefinition fieldTITLE = new FieldDefinition();
        fieldTITLE.setName("TITLE");
        fieldTITLE.setTypeName("VARCHAR2");
        fieldTITLE.setSize(26);
        fieldTITLE.setSubSize(0);
        fieldTITLE.setIsPrimaryKey(false);
        fieldTITLE.setIsIdentity(false);
        fieldTITLE.setUnique(false);
        fieldTITLE.setShouldAllowNull(true);
        table.addField(fieldTITLE);

        FieldDefinition fieldCOMPANY_ID = new FieldDefinition();
        fieldCOMPANY_ID.setName("COMPANY_ID");
        fieldCOMPANY_ID.setTypeName("NUMBER");
        fieldCOMPANY_ID.setSize(15);
        fieldCOMPANY_ID.setSubSize(0);
        fieldCOMPANY_ID.setIsPrimaryKey(false);
        fieldCOMPANY_ID.setIsIdentity(false);
        fieldCOMPANY_ID.setUnique(false);
        fieldCOMPANY_ID.setShouldAllowNull(true);
        fieldCOMPANY_ID.setForeignKeyFieldName("CMP3_COMPANY.ID");
        table.addField(fieldCOMPANY_ID);

        return table;
    }

    public TableDefinition buildOFFROADTIREINFOTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_OFFROAD_TIRE");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        fieldID.setForeignKeyFieldName("CMP3_TIRE.ID");
        table.addField(fieldID);

        FieldDefinition fieldNAME = new FieldDefinition();
        fieldNAME.setName("NAME");
        fieldNAME.setTypeName("VARCHAR2");
        fieldNAME.setSize(25);
        fieldNAME.setSubSize(0);
        fieldNAME.setIsPrimaryKey(false);
        fieldNAME.setIsIdentity(false);
        fieldNAME.setUnique(false);
        fieldNAME.setShouldAllowNull(true);
        table.addField(fieldNAME);

        FieldDefinition fieldCODE = new FieldDefinition();
        fieldCODE.setName("CODE");
        fieldCODE.setTypeName("VARCHAR2");
        fieldCODE.setSize(20);
        fieldCODE.setSubSize(0);
        fieldCODE.setIsPrimaryKey(false);
        fieldCODE.setIsIdentity(false);
        fieldCODE.setUnique(false);
        fieldCODE.setShouldAllowNull(true);
        table.addField(fieldCODE);

        FieldDefinition fieldDTYPE = new FieldDefinition();
        fieldDTYPE.setName("DTYPE");
        fieldDTYPE.setTypeName("VARCHAR2");
        fieldDTYPE.setSize(15);
        fieldDTYPE.setSubSize(0);
        fieldDTYPE.setIsPrimaryKey(false);
        fieldDTYPE.setIsIdentity(false);
        fieldDTYPE.setUnique(false);
        fieldDTYPE.setShouldAllowNull(true);
        table.addField(fieldDTYPE);

        return table;
    }

    public TableDefinition buildPERSONTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_PERSON");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldNAME = new FieldDefinition();
        fieldNAME.setName("NAME");
        fieldNAME.setTypeName("VARCHAR2");
        fieldNAME.setSize(20);
        fieldNAME.setSubSize(0);
        fieldNAME.setIsPrimaryKey(false);
        fieldNAME.setIsIdentity(false);
        fieldNAME.setUnique(false);
        fieldNAME.setShouldAllowNull(true);
        table.addField(fieldNAME);

        FieldDefinition fieldC_TYPE = new FieldDefinition();
        fieldC_TYPE.setName("DTYPE");
        fieldC_TYPE.setTypeName("NUMBER");
        fieldC_TYPE.setSize(15);
        fieldC_TYPE.setSubSize(0);
        fieldC_TYPE.setIsPrimaryKey(false);
        fieldC_TYPE.setIsIdentity(false);
        fieldC_TYPE.setUnique(false);
        fieldC_TYPE.setShouldAllowNull(true);
        table.addField(fieldC_TYPE);

        FieldDefinition fieldREP_ID = new FieldDefinition();
        fieldREP_ID.setName("REP_ID");
        fieldREP_ID.setTypeName("NUMBER");
        fieldREP_ID.setSize(15);
        fieldREP_ID.setSubSize(0);
        fieldREP_ID.setIsPrimaryKey(false);
        fieldREP_ID.setIsIdentity(false);
        fieldREP_ID.setUnique(false);
        fieldREP_ID.setShouldAllowNull(true);
        table.addField(fieldREP_ID);

        FieldDefinition fieldFRIEND_ID = new FieldDefinition();
        fieldFRIEND_ID.setName("FRIEND_ID");
        fieldFRIEND_ID.setTypeName("NUMBER");
        fieldFRIEND_ID.setSize(15);
        fieldFRIEND_ID.setSubSize(0);
        fieldFRIEND_ID.setIsPrimaryKey(false);
        fieldFRIEND_ID.setIsIdentity(false);
        fieldFRIEND_ID.setUnique(false);
        fieldFRIEND_ID.setShouldAllowNull(true);
        table.addField(fieldFRIEND_ID);

        FieldDefinition fieldCAR_ID = new FieldDefinition();
        fieldCAR_ID.setName("CAR_ID");
        fieldCAR_ID.setTypeName("NUMBER");
        fieldCAR_ID.setSize(15);
        fieldCAR_ID.setSubSize(0);
        fieldCAR_ID.setIsPrimaryKey(false);
        fieldCAR_ID.setIsIdentity(false);
        fieldCAR_ID.setUnique(false);
        fieldCAR_ID.setShouldAllowNull(true);
        table.addField(fieldCAR_ID);

        ForeignKeyConstraint foreignKeyPERSON_CAR = new ForeignKeyConstraint();
        foreignKeyPERSON_CAR.setName("PERSON_CAR");
        foreignKeyPERSON_CAR.setTargetTable("CMP3_VEHICLE");
        foreignKeyPERSON_CAR.addSourceField("CAR_ID");
        foreignKeyPERSON_CAR.addTargetField("ID");
        table.addForeignKeyConstraint(foreignKeyPERSON_CAR);

        ForeignKeyConstraint foreignKeyPERSON_ENGINEER = new ForeignKeyConstraint();
        foreignKeyPERSON_ENGINEER.setName("PERSON_ENGINEER");
        foreignKeyPERSON_ENGINEER.setTargetTable("CMP3_ENGINEER");
        foreignKeyPERSON_ENGINEER.addSourceField("FRIEND_ID");
        foreignKeyPERSON_ENGINEER.addTargetField("ID");
        table.addForeignKeyConstraint(foreignKeyPERSON_ENGINEER);

        ForeignKeyConstraint foreignKeyPERSON_REP = new ForeignKeyConstraint();
        foreignKeyPERSON_REP.setName("PERSON_LAWYER");
        foreignKeyPERSON_REP.setTargetTable("CMP3_PERSON");
        foreignKeyPERSON_REP.addSourceField("REP_ID");
        foreignKeyPERSON_REP.addTargetField("ID");
        table.addForeignKeyConstraint(foreignKeyPERSON_REP);

        return table;
    }

    public TableDefinition buildVEHICLETable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_VEHICLE");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldTYPE = new FieldDefinition();
        fieldTYPE.setName("VEH_TYPE");
        fieldTYPE.setTypeName("VARCHAR2");
        fieldTYPE.setSize(15);
        fieldTYPE.setSubSize(0);
        fieldTYPE.setIsPrimaryKey(false);
        fieldTYPE.setIsIdentity(false);
        fieldTYPE.setUnique(false);
        fieldTYPE.setShouldAllowNull(true);
        table.addField(fieldTYPE);

        FieldDefinition fieldCAPACITY = new FieldDefinition();
        fieldCAPACITY.setName("CAPACITY");
        fieldCAPACITY.setTypeName("NUMBER");
        fieldCAPACITY.setSize(10);
        fieldCAPACITY.setSubSize(0);
        fieldCAPACITY.setIsPrimaryKey(false);
        fieldCAPACITY.setIsIdentity(false);
        fieldCAPACITY.setUnique(false);
        fieldCAPACITY.setShouldAllowNull(true);
        table.addField(fieldCAPACITY);

        FieldDefinition fieldOWNER_ID = new FieldDefinition();
        fieldOWNER_ID.setName("OWNER_ID");
        fieldOWNER_ID.setTypeName("NUMBER");
        fieldOWNER_ID.setSize(15);
        fieldOWNER_ID.setSubSize(0);
        fieldOWNER_ID.setIsPrimaryKey(false);
        fieldOWNER_ID.setIsIdentity(false);
        fieldOWNER_ID.setUnique(false);
        fieldOWNER_ID.setShouldAllowNull(true);
        table.addField(fieldOWNER_ID);

        FieldDefinition fieldDIRECTORY_ID = new FieldDefinition();
        fieldDIRECTORY_ID.setName("DIRECTORY_ID");
        fieldDIRECTORY_ID.setTypeName("NUMBER");
        fieldDIRECTORY_ID.setSize(15);
        fieldDIRECTORY_ID.setSubSize(0);
        fieldDIRECTORY_ID.setIsPrimaryKey(false);
        fieldDIRECTORY_ID.setIsIdentity(false);
        fieldDIRECTORY_ID.setUnique(false);
        fieldDIRECTORY_ID.setShouldAllowNull(true);
        table.addField(fieldDIRECTORY_ID);

        ForeignKeyConstraint foreignKeyVEHICLE_COMPANY = new ForeignKeyConstraint();
        foreignKeyVEHICLE_COMPANY.setName("VEHICLE_COMPANY_FK");
        foreignKeyVEHICLE_COMPANY.setTargetTable("CMP3_COMPANY");
        foreignKeyVEHICLE_COMPANY.addSourceField("OWNER_ID");
        foreignKeyVEHICLE_COMPANY.addTargetField("ID");
        table.addForeignKeyConstraint(foreignKeyVEHICLE_COMPANY);

        ForeignKeyConstraint foreignKeyVEHICLE_DIRECTORY = new ForeignKeyConstraint();
        foreignKeyVEHICLE_DIRECTORY.setName("VEHICLE_DIRECTORY_FK");
        foreignKeyVEHICLE_DIRECTORY.setTargetTable("CMP3_VEHICLE_DIRECTORY");
        foreignKeyVEHICLE_DIRECTORY.addSourceField("DIRECTORY_ID");
        foreignKeyVEHICLE_DIRECTORY.addTargetField("ID");
        table.addForeignKeyConstraint(foreignKeyVEHICLE_DIRECTORY);


        return table;
    }

    public TableDefinition buildVEHICLE_DIRECTORYTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_VEHICLE_DIRECTORY");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldNAME = new FieldDefinition();
        fieldNAME.setName("NAME");
        fieldNAME.setTypeName("VARCHAR2");
        fieldNAME.setSize(15);
        fieldNAME.setSubSize(0);
        fieldNAME.setIsPrimaryKey(false);
        fieldNAME.setIsIdentity(false);
        fieldNAME.setUnique(false);
        fieldNAME.setShouldAllowNull(true);
        table.addField(fieldNAME);

        return table;
    }

    public TableDefinition buildTIREINFOTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_TIRE");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        fieldID = new FieldDefinition();
        fieldID.setName("PRESSURE");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(false);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(true);
        table.addField(fieldID);

        fieldID = new FieldDefinition();
        fieldID.setName("SPEEDRATING");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(false);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(true);
        table.addField(fieldID);

        FieldDefinition fieldTYPE = new FieldDefinition();
        fieldTYPE.setName("TIRE_TYPE");
        fieldTYPE.setTypeName("VARCHAR2");
        fieldTYPE.setSize(15);
        fieldTYPE.setSubSize(0);
        fieldTYPE.setIsPrimaryKey(false);
        fieldTYPE.setIsIdentity(false);
        fieldTYPE.setUnique(false);
        fieldTYPE.setShouldAllowNull(true);
        table.addField(fieldTYPE);

        return table;
    }

    public TableDefinition buildAAATable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_AAA");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldDTYPES = new FieldDefinition();
        fieldDTYPES.setName("DTYPES");
        fieldDTYPES.setTypeName("VARCHAR");
        fieldDTYPES.setSize(2);
        fieldDTYPES.setIsPrimaryKey(false);
        fieldDTYPES.setIsIdentity(false);
        fieldDTYPES.setUnique(false);
        fieldDTYPES.setShouldAllowNull(true);
        table.addField(fieldDTYPES);

        FieldDefinition fieldSTRINGDATA = new FieldDefinition();
        fieldSTRINGDATA.setName("FOO");
        fieldSTRINGDATA.setTypeName("VARCHAR");
        fieldSTRINGDATA.setSize(30);
        fieldSTRINGDATA.setIsPrimaryKey(false);
        fieldSTRINGDATA.setIsIdentity(false);
        fieldSTRINGDATA.setUnique(false);
        fieldSTRINGDATA.setShouldAllowNull(true);
        table.addField(fieldSTRINGDATA);

        return table;
    }

    public static TableDefinition buildAAA_STRINGSETTable() {
        TableDefinition table = new TableDefinition();
        table.setName("AAA_STRINGSET");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("AAA_ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);//needed to prevent duplicates
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition DESCRIP_field = new FieldDefinition();
        DESCRIP_field.setName("STRINGSET");
        DESCRIP_field.setTypeName("VARCHAR");
        DESCRIP_field.setSize(40);
        fieldID.setIsPrimaryKey(true);//needed to prevent duplicates
        DESCRIP_field.setIsPrimaryKey(false);
        DESCRIP_field.setUnique(false);
        DESCRIP_field.setIsIdentity(false);
        table.addField(DESCRIP_field);

        return table;
    }

    public TableDefinition buildBBBTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_BBB");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        fieldID.setForeignKeyFieldName("CMP3_AAA.ID");
        table.addField(fieldID);

        FieldDefinition fieldSTRINGDATA = new FieldDefinition();
        fieldSTRINGDATA.setName("BAR");
        fieldSTRINGDATA.setTypeName("VARCHAR");
        fieldSTRINGDATA.setSize(30);
        fieldSTRINGDATA.setIsPrimaryKey(false);
        fieldSTRINGDATA.setIsIdentity(false);
        fieldSTRINGDATA.setUnique(false);
        fieldSTRINGDATA.setShouldAllowNull(true);
        table.addField(fieldSTRINGDATA);

        return table;
    }

    public TableDefinition buildCCCTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_CCC");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        fieldID.setForeignKeyFieldName("CMP3_BBB.ID");
        table.addField(fieldID);

        FieldDefinition fieldSTRINGDATA = new FieldDefinition();
        fieldSTRINGDATA.setName("XYZ");
        fieldSTRINGDATA.setTypeName("VARCHAR");
        fieldSTRINGDATA.setSize(30);
        fieldSTRINGDATA.setIsPrimaryKey(false);
        fieldSTRINGDATA.setIsIdentity(false);
        fieldSTRINGDATA.setUnique(false);
        fieldSTRINGDATA.setShouldAllowNull(true);
        table.addField(fieldSTRINGDATA);

        return table;
    }

    public TableDefinition buildDDDTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_DDD");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(15);
        fieldID.setSubSize(0);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldPOSTLOADCOUNT = new FieldDefinition();
        fieldPOSTLOADCOUNT.setName("POST_LOAD_COUNT");
        fieldPOSTLOADCOUNT.setTypeName("NUMBER");
        fieldPOSTLOADCOUNT.setSize(15);
        fieldPOSTLOADCOUNT.setSubSize(0);
        fieldPOSTLOADCOUNT.setIsPrimaryKey(false);
        fieldPOSTLOADCOUNT.setIsIdentity(false);
        fieldPOSTLOADCOUNT.setUnique(false);
        fieldPOSTLOADCOUNT.setShouldAllowNull(true);
        table.addField(fieldPOSTLOADCOUNT);

        FieldDefinition fieldELPOSTLOADCOUNT = new FieldDefinition();
        fieldELPOSTLOADCOUNT.setName("EL_POST_LOAD_COUNT");
        fieldELPOSTLOADCOUNT.setTypeName("NUMBER");
        fieldELPOSTLOADCOUNT.setSize(15);
        fieldELPOSTLOADCOUNT.setSubSize(0);
        fieldELPOSTLOADCOUNT.setIsPrimaryKey(false);
        fieldELPOSTLOADCOUNT.setIsIdentity(false);
        fieldELPOSTLOADCOUNT.setUnique(false);
        fieldELPOSTLOADCOUNT.setShouldAllowNull(true);
        table.addField(fieldELPOSTLOADCOUNT);

        FieldDefinition aaaID = new FieldDefinition();
        aaaID.setName("AAA_ID");
        aaaID.setTypeName("NUMBER");
        aaaID.setSize(15);
        aaaID.setSubSize(0);
        aaaID.setShouldAllowNull(true);
        aaaID.setIsPrimaryKey(false);
        aaaID.setUnique(false);
        aaaID.setIsIdentity(false);
        aaaID.setForeignKeyFieldName("CMP3_AAA.ID");
        table.addField(aaaID);

        return table;
    }

    public TableDefinition buildCOMPUTERTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_COMPUTER");

        FieldDefinition fieldMFR = new FieldDefinition();
        fieldMFR.setName("MFR");
        fieldMFR.setTypeName("VARCHAR");
        fieldMFR.setSize(30);
        fieldMFR.setIsPrimaryKey(true);
        fieldMFR.setIsIdentity(false);
        fieldMFR.setUnique(false);
        fieldMFR.setShouldAllowNull(false);
        table.addField(fieldMFR);

        FieldDefinition fieldSNO = new FieldDefinition();
        fieldSNO.setName("SNO");
        fieldSNO.setTypeName("NUMBER");
        fieldSNO.setSize(10);
        fieldSNO.setSubSize(0);
        fieldSNO.setIsPrimaryKey(true);
        fieldSNO.setIsIdentity(false);
        fieldSNO.setUnique(false);
        fieldSNO.setShouldAllowNull(false);
        table.addField(fieldSNO);

        FieldDefinition fieldDTYPE = new FieldDefinition();
        fieldDTYPE.setName("DTYPE");
        fieldDTYPE.setTypeName("VARCHAR");
        fieldDTYPE.setSize(20);
        fieldDTYPE.setIsPrimaryKey(false);
        fieldDTYPE.setIsIdentity(false);
        fieldDTYPE.setUnique(false);
        fieldDTYPE.setShouldAllowNull(true);
        table.addField(fieldDTYPE);

        return table;
    }

    public TableDefinition buildDESKTOPTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_DESKTOP");

        FieldDefinition fieldMFR = new FieldDefinition();
        fieldMFR.setName("DT_MFR");
        fieldMFR.setTypeName("VARCHAR");
        fieldMFR.setSize(30);
        fieldMFR.setIsPrimaryKey(true);
        fieldMFR.setIsIdentity(false);
        fieldMFR.setUnique(false);
        fieldMFR.setShouldAllowNull(false);
        table.addField(fieldMFR);

        FieldDefinition fieldSNO = new FieldDefinition();
        fieldSNO.setName("DT_SNO");
        fieldSNO.setTypeName("NUMBER");
        fieldSNO.setSize(10);
        fieldSNO.setSubSize(0);
        fieldSNO.setIsPrimaryKey(true);
        fieldSNO.setIsIdentity(false);
        fieldSNO.setUnique(false);
        fieldSNO.setShouldAllowNull(false);
        table.addField(fieldSNO);

        ForeignKeyConstraint fkConstraint = new ForeignKeyConstraint();
        fkConstraint.setName("CMP3_DESKTOP_FK");
        fkConstraint.addSourceField("DT_MFR");
        fkConstraint.addSourceField("DT_SNO");
        fkConstraint.setTargetTable("CMP3_COMPUTER");
        fkConstraint.addTargetField("MFR");
        fkConstraint.addTargetField("SNO");
        table.addForeignKeyConstraint(fkConstraint);

        return table;
    }

    // Engineer-Desktop many-to-many relationship table
    public TableDefinition buildENGINEER_DESKTOPTable() {
        TableDefinition table = new TableDefinition();

        table.setName("CMP3_ENGINEER_DESKTOP");

        FieldDefinition fieldEngineerId = new FieldDefinition();
        fieldEngineerId.setName("ENGINEER_ID");
        fieldEngineerId.setTypeName("NUMBER");
        fieldEngineerId.setSize(15);
        fieldEngineerId.setSubSize(0);
        fieldEngineerId.setShouldAllowNull(false);
        fieldEngineerId.setIsPrimaryKey(true);
        fieldEngineerId.setUnique(false);
        fieldEngineerId.setIsIdentity(false);
        fieldEngineerId.setForeignKeyFieldName("CMP3_ENGINEER.ID");
        table.addField(fieldEngineerId);

        FieldDefinition fieldDesktopMFR = new FieldDefinition();
        fieldDesktopMFR.setName("DESKTOP_MFR");
        fieldDesktopMFR.setTypeName("VARCHAR");
        fieldDesktopMFR.setSize(30);
        fieldDesktopMFR.setIsPrimaryKey(true);
        fieldDesktopMFR.setIsIdentity(false);
        fieldDesktopMFR.setUnique(false);
        fieldDesktopMFR.setShouldAllowNull(false);
        table.addField(fieldDesktopMFR);

        FieldDefinition fieldDesktopSNO = new FieldDefinition();
        fieldDesktopSNO.setName("DESKTOP_SNO");
        fieldDesktopSNO.setTypeName("NUMBER");
        fieldDesktopSNO.setSize(10);
        fieldDesktopSNO.setSubSize(0);
        fieldDesktopSNO.setIsPrimaryKey(true);
        fieldDesktopSNO.setIsIdentity(false);
        fieldDesktopSNO.setUnique(false);
        fieldDesktopSNO.setShouldAllowNull(false);
        table.addField(fieldDesktopSNO);

        return table;
    }

    public TableDefinition buildLAPTOPTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_LAPTOP");

        FieldDefinition fieldMFR = new FieldDefinition();
        fieldMFR.setName("MFR");
        fieldMFR.setTypeName("VARCHAR");
        fieldMFR.setSize(30);
        fieldMFR.setIsPrimaryKey(true);
        fieldMFR.setIsIdentity(false);
        fieldMFR.setUnique(false);
        fieldMFR.setShouldAllowNull(false);
        table.addField(fieldMFR);

        FieldDefinition fieldSNO = new FieldDefinition();
        fieldSNO.setName("SNO");
        fieldSNO.setTypeName("NUMBER");
        fieldSNO.setSize(10);
        fieldSNO.setSubSize(0);
        fieldSNO.setIsPrimaryKey(true);
        fieldSNO.setIsIdentity(false);
        fieldSNO.setUnique(false);
        fieldSNO.setShouldAllowNull(false);
        table.addField(fieldSNO);

        // FOREIGN KEY (MFR, SNO) REFERENCES CMP3_COMPUTER (MFR, SNO)
        ForeignKeyConstraint fkConstraint = new ForeignKeyConstraint();
        fkConstraint.setName("CMP3_LAPTOP_FK1");
        fkConstraint.addSourceField("MFR");
        fkConstraint.addSourceField("SNO");
        fkConstraint.setTargetTable("CMP3_COMPUTER");
        fkConstraint.addTargetField("MFR");
        fkConstraint.addTargetField("SNO");

        table.addForeignKeyConstraint(fkConstraint);
        return table;
    }

    // Engineer-Laptop many-to-many relationship table
    public TableDefinition buildENGINEER_LAPTOPTable() {
        TableDefinition table = new TableDefinition();

        table.setName("CMP3_ENGINEER_LAPTOP");

        FieldDefinition fieldEngineerId = new FieldDefinition();
        fieldEngineerId.setName("ENGINEER_ID");
        fieldEngineerId.setTypeName("NUMBER");
        fieldEngineerId.setSize(15);
        fieldEngineerId.setSubSize(0);
        fieldEngineerId.setShouldAllowNull(false);
        fieldEngineerId.setIsPrimaryKey(true);
        fieldEngineerId.setUnique(false);
        fieldEngineerId.setIsIdentity(false);
        fieldEngineerId.setForeignKeyFieldName("CMP3_ENGINEER.ID");
        table.addField(fieldEngineerId);

        FieldDefinition fieldLaptopMFR = new FieldDefinition();
        fieldLaptopMFR.setName("LAPTOP_MFR");
        fieldLaptopMFR.setTypeName("VARCHAR");
        fieldLaptopMFR.setSize(30);
        fieldLaptopMFR.setIsPrimaryKey(true);
        fieldLaptopMFR.setIsIdentity(false);
        fieldLaptopMFR.setUnique(false);
        fieldLaptopMFR.setShouldAllowNull(false);
        table.addField(fieldLaptopMFR);

        FieldDefinition fieldLaptopSNO = new FieldDefinition();
        fieldLaptopSNO.setName("LAPTOP_SNO");
        fieldLaptopSNO.setTypeName("NUMBER");
        fieldLaptopSNO.setSize(10);
        fieldLaptopSNO.setSubSize(0);
        fieldLaptopSNO.setIsPrimaryKey(true);
        fieldLaptopSNO.setIsIdentity(false);
        fieldLaptopSNO.setUnique(false);
        fieldLaptopSNO.setShouldAllowNull(false);
        table.addField(fieldLaptopSNO);

        // FOREIGN KEY (LAPTOP_MFR, LAPTOP_SNO) REFERENCES CMP3_LAPTOP (MFR, SNO)
        ForeignKeyConstraint fkConstraint = new ForeignKeyConstraint();
        fkConstraint.setName("CMP3_ENG_LAP_FK1");
        fkConstraint.addSourceField("LAPTOP_MFR");
        fkConstraint.addSourceField("LAPTOP_SNO");
        fkConstraint.setTargetTable("CMP3_LAPTOP");
        fkConstraint.addTargetField("MFR");
        fkConstraint.addTargetField("SNO");

        table.addForeignKeyConstraint(fkConstraint);
        return table;
    }

    public TableDefinition buildWEAPONTable() {
        TableDefinition table = new TableDefinition();
        table.setName("TPC_WEAPON");

        FieldDefinition fieldSERIAL_NUMBER = new FieldDefinition();
        fieldSERIAL_NUMBER.setName("SERIAL_NUMBER");
        fieldSERIAL_NUMBER.setTypeName("NUMBER");
        fieldSERIAL_NUMBER.setSize(10);
        fieldSERIAL_NUMBER.setIsPrimaryKey(true);
        fieldSERIAL_NUMBER.setIsIdentity(false);
        fieldSERIAL_NUMBER.setUnique(false);
        fieldSERIAL_NUMBER.setShouldAllowNull(false);
        table.addField(fieldSERIAL_NUMBER);

        FieldDefinition fieldDESCRIP = new FieldDefinition();
        fieldDESCRIP.setName("DESCRIP");
        fieldDESCRIP.setTypeName("VARCHAR");
        fieldDESCRIP.setSize(50);
        fieldDESCRIP.setIsPrimaryKey(false);
        fieldDESCRIP.setIsIdentity(false);
        fieldDESCRIP.setUnique(false);
        fieldDESCRIP.setShouldAllowNull(true);
        table.addField(fieldDESCRIP);

        return table;
    }

    public TableDefinition buildDIRECTWEAPONTable() {
        TableDefinition table = new TableDefinition();
        table.setName("TPC_DIR_WEAPON");

        FieldDefinition fieldSERIAL_NUMBER = new FieldDefinition();
        fieldSERIAL_NUMBER.setName("SERIAL_NUMBER");
        fieldSERIAL_NUMBER.setTypeName("NUMBER");
        fieldSERIAL_NUMBER.setSize(10);
        fieldSERIAL_NUMBER.setIsPrimaryKey(true);
        fieldSERIAL_NUMBER.setIsIdentity(false);
        fieldSERIAL_NUMBER.setUnique(false);
        fieldSERIAL_NUMBER.setShouldAllowNull(false);
        table.addField(fieldSERIAL_NUMBER);

        FieldDefinition fieldDESCRIP = new FieldDefinition();
        fieldDESCRIP.setName("DESCRIP");
        fieldDESCRIP.setTypeName("VARCHAR");
        fieldDESCRIP.setSize(50);
        fieldDESCRIP.setIsPrimaryKey(false);
        fieldDESCRIP.setIsIdentity(false);
        fieldDESCRIP.setUnique(false);
        fieldDESCRIP.setShouldAllowNull(true);
        table.addField(fieldDESCRIP);

        return table;
    }

    public TableDefinition buildINDIRECTWEAPONTable() {
        TableDefinition table = new TableDefinition();
        table.setName("TPC_IND_WEAPON");

        FieldDefinition fieldSERIAL_NUMBER = new FieldDefinition();
        fieldSERIAL_NUMBER.setName("SERIAL_NUMBER");
        fieldSERIAL_NUMBER.setTypeName("NUMBER");
        fieldSERIAL_NUMBER.setSize(10);
        fieldSERIAL_NUMBER.setIsPrimaryKey(true);
        fieldSERIAL_NUMBER.setIsIdentity(false);
        fieldSERIAL_NUMBER.setUnique(false);
        fieldSERIAL_NUMBER.setShouldAllowNull(false);
        table.addField(fieldSERIAL_NUMBER);

        FieldDefinition fieldDESCRIP = new FieldDefinition();
        fieldDESCRIP.setName("DESCRIP");
        fieldDESCRIP.setTypeName("VARCHAR");
        fieldDESCRIP.setSize(50);
        fieldDESCRIP.setIsPrimaryKey(false);
        fieldDESCRIP.setIsIdentity(false);
        fieldDESCRIP.setUnique(false);
        fieldDESCRIP.setShouldAllowNull(true);
        table.addField(fieldDESCRIP);

        return table;
    }

    public TableDefinition buildGUNTable() {
        TableDefinition table = new TableDefinition();
        table.setName("TPC_GUN");

        FieldDefinition fieldSERIAL_NUMBER = new FieldDefinition();
        fieldSERIAL_NUMBER.setName("SERIAL_NUMBER");
        fieldSERIAL_NUMBER.setTypeName("NUMBER");
        fieldSERIAL_NUMBER.setSize(10);
        fieldSERIAL_NUMBER.setIsPrimaryKey(true);
        fieldSERIAL_NUMBER.setIsIdentity(false);
        fieldSERIAL_NUMBER.setUnique(false);
        fieldSERIAL_NUMBER.setShouldAllowNull(false);
        table.addField(fieldSERIAL_NUMBER);

        FieldDefinition fieldDESCRIP = new FieldDefinition();
        fieldDESCRIP.setName("DESCRIP");
        fieldDESCRIP.setTypeName("VARCHAR");
        fieldDESCRIP.setSize(50);
        fieldDESCRIP.setIsPrimaryKey(false);
        fieldDESCRIP.setIsIdentity(false);
        fieldDESCRIP.setUnique(false);
        fieldDESCRIP.setShouldAllowNull(true);
        table.addField(fieldDESCRIP);

        FieldDefinition fieldCALIBER = new FieldDefinition();
        fieldCALIBER.setName("CALIBER");
        fieldCALIBER.setTypeName("NUMBER");
        fieldCALIBER.setSize(10);
        fieldCALIBER.setIsPrimaryKey(false);
        fieldCALIBER.setIsIdentity(false);
        fieldCALIBER.setUnique(false);
        fieldCALIBER.setShouldAllowNull(false);
        table.addField(fieldCALIBER);

        FieldDefinition fieldMODEL = new FieldDefinition();
        fieldMODEL.setName("MODEL");
        fieldMODEL.setTypeName("VARCHAR");
        fieldMODEL.setSize(50);
        fieldMODEL.setIsPrimaryKey(false);
        fieldMODEL.setIsIdentity(false);
        fieldMODEL.setUnique(false);
        fieldMODEL.setShouldAllowNull(true);
        table.addField(fieldMODEL);

        return table;
    }

    public TableDefinition buildKNIFETable() {
        TableDefinition table = new TableDefinition();
        table.setName("TPC_KNIFE");

        FieldDefinition fieldSERIAL_NUMBER = new FieldDefinition();
        fieldSERIAL_NUMBER.setName("SERIAL_NUMBER");
        fieldSERIAL_NUMBER.setTypeName("NUMBER");
        fieldSERIAL_NUMBER.setSize(10);
        fieldSERIAL_NUMBER.setIsPrimaryKey(true);
        fieldSERIAL_NUMBER.setIsIdentity(false);
        fieldSERIAL_NUMBER.setUnique(false);
        fieldSERIAL_NUMBER.setShouldAllowNull(false);
        table.addField(fieldSERIAL_NUMBER);

        FieldDefinition fieldDESCRIP = new FieldDefinition();
        fieldDESCRIP.setName("DESCRIP");
        fieldDESCRIP.setTypeName("VARCHAR");
        fieldDESCRIP.setSize(50);
        fieldDESCRIP.setIsPrimaryKey(false);
        fieldDESCRIP.setIsIdentity(false);
        fieldDESCRIP.setUnique(false);
        fieldDESCRIP.setShouldAllowNull(true);
        table.addField(fieldDESCRIP);

        FieldDefinition fieldNAME = new FieldDefinition();
        fieldNAME.setName("NAME");
        fieldNAME.setTypeName("VARCHAR");
        fieldNAME.setSize(50);
        fieldNAME.setIsPrimaryKey(false);
        fieldNAME.setIsIdentity(false);
        fieldNAME.setUnique(false);
        fieldNAME.setShouldAllowNull(true);
        table.addField(fieldNAME);

        FieldDefinition fieldBLADE = new FieldDefinition();
        fieldBLADE.setName("BLADE");
        fieldBLADE.setTypeName("NUMBER");
        fieldBLADE.setSize(10);
        fieldBLADE.setIsPrimaryKey(false);
        fieldBLADE.setIsIdentity(false);
        fieldBLADE.setUnique(false);
        fieldBLADE.setShouldAllowNull(false);
        table.addField(fieldBLADE);

        FieldDefinition fieldKNIFE_TYPE = new FieldDefinition();
        fieldKNIFE_TYPE.setName("KNIFE_TYPE");
        fieldKNIFE_TYPE.setTypeName("VARCHAR");
        fieldKNIFE_TYPE.setSize(50);
        fieldKNIFE_TYPE.setIsPrimaryKey(false);
        fieldKNIFE_TYPE.setIsIdentity(false);
        fieldKNIFE_TYPE.setUnique(false);
        fieldKNIFE_TYPE.setShouldAllowNull(true);
        table.addField(fieldKNIFE_TYPE);

        return table;
    }

    public TableDefinition buildPOISONTable() {
        TableDefinition table = new TableDefinition();
        table.setName("TPC_POISON");

        FieldDefinition fieldSERIAL_NUMBER = new FieldDefinition();
        fieldSERIAL_NUMBER.setName("SERIAL_NUMBER");
        fieldSERIAL_NUMBER.setTypeName("NUMBER");
        fieldSERIAL_NUMBER.setSize(10);
        fieldSERIAL_NUMBER.setIsPrimaryKey(true);
        fieldSERIAL_NUMBER.setIsIdentity(false);
        fieldSERIAL_NUMBER.setUnique(false);
        fieldSERIAL_NUMBER.setShouldAllowNull(false);
        table.addField(fieldSERIAL_NUMBER);

        FieldDefinition fieldDESCRIP = new FieldDefinition();
        fieldDESCRIP.setName("DESCRIP");
        fieldDESCRIP.setTypeName("VARCHAR");
        fieldDESCRIP.setSize(50);
        fieldDESCRIP.setIsPrimaryKey(false);
        fieldDESCRIP.setIsIdentity(false);
        fieldDESCRIP.setUnique(false);
        fieldDESCRIP.setShouldAllowNull(true);
        table.addField(fieldDESCRIP);

        FieldDefinition fieldNAME = new FieldDefinition();
        fieldNAME.setName("E_TIME");
        fieldNAME.setTypeName("VARCHAR");
        fieldNAME.setSize(50);
        fieldNAME.setIsPrimaryKey(false);
        fieldNAME.setIsIdentity(false);
        fieldNAME.setUnique(false);
        fieldNAME.setShouldAllowNull(true);
        table.addField(fieldNAME);

        return table;
    }

    public TableDefinition buildBOMBTable() {
        TableDefinition table = new TableDefinition();
        table.setName("TPC_BOMB");

        FieldDefinition fieldSERIAL_NUMBER = new FieldDefinition();
        fieldSERIAL_NUMBER.setName("SERIAL_NUMBER");
        fieldSERIAL_NUMBER.setTypeName("NUMBER");
        fieldSERIAL_NUMBER.setSize(10);
        fieldSERIAL_NUMBER.setIsPrimaryKey(true);
        fieldSERIAL_NUMBER.setIsIdentity(false);
        fieldSERIAL_NUMBER.setUnique(false);
        fieldSERIAL_NUMBER.setShouldAllowNull(false);
        table.addField(fieldSERIAL_NUMBER);

        FieldDefinition fieldDESCRIP = new FieldDefinition();
        fieldDESCRIP.setName("DESCRIP");
        fieldDESCRIP.setTypeName("VARCHAR");
        fieldDESCRIP.setSize(50);
        fieldDESCRIP.setIsPrimaryKey(false);
        fieldDESCRIP.setIsIdentity(false);
        fieldDESCRIP.setUnique(false);
        fieldDESCRIP.setShouldAllowNull(true);
        table.addField(fieldDESCRIP);

        FieldDefinition fieldBOMB_TYPE = new FieldDefinition();
        fieldBOMB_TYPE.setName("B_TYPE");
        fieldBOMB_TYPE.setTypeName("NUMBER");
        fieldBOMB_TYPE.setSize(10);
        fieldBOMB_TYPE.setIsPrimaryKey(false);
        fieldBOMB_TYPE.setIsIdentity(false);
        fieldBOMB_TYPE.setUnique(false);
        fieldBOMB_TYPE.setShouldAllowNull(true);
        table.addField(fieldBOMB_TYPE);

        return table;
    }

    public TableDefinition buildELIMINATIONTable() {
        TableDefinition table = new TableDefinition();
        table.setName("TPC_ELIMINATION");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(10);
        fieldID.setIsPrimaryKey(false);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldNAME = new FieldDefinition();
        fieldNAME.setName("NAME");
        fieldNAME.setTypeName("VARCHAR");
        fieldNAME.setSize(50);
        fieldNAME.setIsPrimaryKey(false);
        fieldNAME.setIsIdentity(false);
        fieldNAME.setUnique(false);
        fieldNAME.setShouldAllowNull(false);
        table.addField(fieldNAME);

        FieldDefinition fieldDESCRIP = new FieldDefinition();
        fieldDESCRIP.setName("DESCRIP");
        fieldDESCRIP.setTypeName("VARCHAR");
        fieldDESCRIP.setSize(50);
        fieldDESCRIP.setIsPrimaryKey(false);
        fieldDESCRIP.setIsIdentity(false);
        fieldDESCRIP.setUnique(false);
        fieldDESCRIP.setShouldAllowNull(true);
        table.addField(fieldDESCRIP);

        FieldDefinition fieldASSASSIN = new FieldDefinition();
        fieldASSASSIN.setName("ASSASSIN_ID");
        fieldASSASSIN.setTypeName("NUMBER");
        fieldASSASSIN.setSize(10);
        fieldASSASSIN.setIsPrimaryKey(false);
        fieldASSASSIN.setIsIdentity(false);
        fieldASSASSIN.setUnique(false);
        fieldASSASSIN.setShouldAllowNull(false);
        table.addField(fieldASSASSIN);

        return table;
    }

    public TableDefinition buildDIRECTELIMINATIONTable() {
        TableDefinition table = new TableDefinition();
        table.setName("TPC_DIR_ELIMINATION");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(10);
        fieldID.setIsPrimaryKey(false);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldNAME = new FieldDefinition();
        fieldNAME.setName("NAME");
        fieldNAME.setTypeName("VARCHAR");
        fieldNAME.setSize(50);
        fieldNAME.setIsPrimaryKey(false);
        fieldNAME.setIsIdentity(false);
        fieldNAME.setUnique(false);
        fieldNAME.setShouldAllowNull(false);
        table.addField(fieldNAME);

        FieldDefinition fieldDESCRIP = new FieldDefinition();
        fieldDESCRIP.setName("DESCRIP");
        fieldDESCRIP.setTypeName("VARCHAR");
        fieldDESCRIP.setSize(50);
        fieldDESCRIP.setIsPrimaryKey(false);
        fieldDESCRIP.setIsIdentity(false);
        fieldDESCRIP.setUnique(false);
        fieldDESCRIP.setShouldAllowNull(true);
        table.addField(fieldDESCRIP);

        FieldDefinition fieldASSASSIN = new FieldDefinition();
        fieldASSASSIN.setName("ASSASSIN_ID");
        fieldASSASSIN.setTypeName("NUMBER");
        fieldASSASSIN.setSize(10);
        fieldASSASSIN.setIsPrimaryKey(false);
        fieldASSASSIN.setIsIdentity(false);
        fieldASSASSIN.setUnique(false);
        fieldASSASSIN.setShouldAllowNull(false);
        table.addField(fieldASSASSIN);

        FieldDefinition fieldWEAPON = new FieldDefinition();
        fieldWEAPON.setName("WEAPON_ID");
        fieldWEAPON.setTypeName("NUMBER");
        fieldWEAPON.setSize(10);
        fieldWEAPON.setIsPrimaryKey(false);
        fieldWEAPON.setIsIdentity(false);
        fieldWEAPON.setUnique(false);
        fieldWEAPON.setShouldAllowNull(false);
        table.addField(fieldWEAPON);

        return table;
    }

    public TableDefinition buildINDIRECTELIMINATIONTable() {
        TableDefinition table = new TableDefinition();
        table.setName("TPC_IND_ELIMINATION");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(10);
        fieldID.setIsPrimaryKey(false);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldNAME = new FieldDefinition();
        fieldNAME.setName("NAME");
        fieldNAME.setTypeName("VARCHAR");
        fieldNAME.setSize(50);
        fieldNAME.setIsPrimaryKey(false);
        fieldNAME.setIsIdentity(false);
        fieldNAME.setUnique(false);
        fieldNAME.setShouldAllowNull(false);
        table.addField(fieldNAME);

        FieldDefinition fieldDESCRIP = new FieldDefinition();
        fieldDESCRIP.setName("DESCRIP");
        fieldDESCRIP.setTypeName("VARCHAR");
        fieldDESCRIP.setSize(50);
        fieldDESCRIP.setIsPrimaryKey(false);
        fieldDESCRIP.setIsIdentity(false);
        fieldDESCRIP.setUnique(false);
        fieldDESCRIP.setShouldAllowNull(true);
        table.addField(fieldDESCRIP);

        FieldDefinition fieldASSASSIN = new FieldDefinition();
        fieldASSASSIN.setName("ASSASSIN_ID");
        fieldASSASSIN.setTypeName("NUMBER");
        fieldASSASSIN.setSize(10);
        fieldASSASSIN.setIsPrimaryKey(false);
        fieldASSASSIN.setIsIdentity(false);
        fieldASSASSIN.setUnique(false);
        fieldASSASSIN.setShouldAllowNull(false);
        table.addField(fieldASSASSIN);

        FieldDefinition fieldWEAPON = new FieldDefinition();
        fieldWEAPON.setName("WEAPON_ID");
        fieldWEAPON.setTypeName("NUMBER");
        fieldWEAPON.setSize(10);
        fieldWEAPON.setIsPrimaryKey(false);
        fieldWEAPON.setIsIdentity(false);
        fieldWEAPON.setUnique(false);
        fieldWEAPON.setShouldAllowNull(false);
        table.addField(fieldWEAPON);

        return table;
    }

    public TableDefinition buildCONTRACTEDPERSONELTable() {
        TableDefinition table = new TableDefinition();
        table.setName("TPC_PERSONEL");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(10);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldNAME = new FieldDefinition();
        fieldNAME.setName("NAME");
        fieldNAME.setTypeName("VARCHAR");
        fieldNAME.setSize(50);
        fieldNAME.setIsPrimaryKey(false);
        fieldNAME.setIsIdentity(false);
        fieldNAME.setUnique(false);
        fieldNAME.setShouldAllowNull(true);
        table.addField(fieldNAME);

        FieldDefinition fieldVERSION = new FieldDefinition();
        fieldVERSION.setName("VERSION");
        fieldVERSION.setTypeName("NUMERIC");
        fieldVERSION.setSize(15);
        fieldVERSION.setShouldAllowNull(true);
        fieldVERSION.setIsPrimaryKey(false);
        fieldVERSION.setUnique(false);
        fieldVERSION.setIsIdentity(false);
        table.addField(fieldVERSION);

        return table;
    }

    public TableDefinition buildASSASSINTable() {
        TableDefinition table = new TableDefinition();
        table.setName("TPC_ASSASSIN");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(10);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldNAME = new FieldDefinition();
        fieldNAME.setName("NAME");
        fieldNAME.setTypeName("VARCHAR");
        fieldNAME.setSize(50);
        fieldNAME.setIsPrimaryKey(false);
        fieldNAME.setIsIdentity(false);
        fieldNAME.setUnique(false);
        fieldNAME.setShouldAllowNull(true);
        table.addField(fieldNAME);

        FieldDefinition fieldWEAPON = new FieldDefinition();
        fieldWEAPON.setName("WEAPON_ID");
        fieldWEAPON.setTypeName("NUMBER");
        fieldWEAPON.setSize(10);
        fieldWEAPON.setIsPrimaryKey(false);
        fieldWEAPON.setIsIdentity(false);
        fieldWEAPON.setUnique(false);
        fieldWEAPON.setShouldAllowNull(true);
        table.addField(fieldWEAPON);

        FieldDefinition fieldVERSION = new FieldDefinition();
        fieldVERSION.setName("VERSION");
        fieldVERSION.setTypeName("NUMERIC");
        fieldVERSION.setSize(15);
        fieldVERSION.setShouldAllowNull(true);
        fieldVERSION.setIsPrimaryKey(false);
        fieldVERSION.setUnique(false);
        fieldVERSION.setIsIdentity(false);
        table.addField(fieldVERSION);

        return table;
    }

    public TableDefinition buildSPECIALASSASSINTable() {
        TableDefinition table = new TableDefinition();
        table.setName("TPC_SPECIAL_ASSASSIN");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(10);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldNAME = new FieldDefinition();
        fieldNAME.setName("NAME");
        fieldNAME.setTypeName("VARCHAR");
        fieldNAME.setSize(50);
        fieldNAME.setIsPrimaryKey(false);
        fieldNAME.setIsIdentity(false);
        fieldNAME.setUnique(false);
        fieldNAME.setShouldAllowNull(true);
        table.addField(fieldNAME);

        FieldDefinition fieldWEAPON = new FieldDefinition();
        fieldWEAPON.setName("WEAPON_ID");
        fieldWEAPON.setTypeName("NUMBER");
        fieldWEAPON.setSize(10);
        fieldWEAPON.setIsPrimaryKey(false);
        fieldWEAPON.setIsIdentity(false);
        fieldWEAPON.setUnique(false);
        fieldWEAPON.setShouldAllowNull(true);
        table.addField(fieldWEAPON);

        FieldDefinition fieldVERSION = new FieldDefinition();
        fieldVERSION.setName("SP_VERSION");
        fieldVERSION.setTypeName("NUMERIC");
        fieldVERSION.setSize(15);
        fieldVERSION.setShouldAllowNull(true);
        fieldVERSION.setIsPrimaryKey(false);
        fieldVERSION.setUnique(false);
        fieldVERSION.setIsIdentity(false);
        table.addField(fieldVERSION);

        return table;
    }

    public TableDefinition buildSOCIALCLUBTable() {
        TableDefinition table = new TableDefinition();
        table.setName("TPC_SOCIAL_CLUB");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(10);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldNAME = new FieldDefinition();
        fieldNAME.setName("NAME");
        fieldNAME.setTypeName("VARCHAR");
        fieldNAME.setSize(50);
        fieldNAME.setIsPrimaryKey(false);
        fieldNAME.setIsIdentity(false);
        fieldNAME.setUnique(false);
        fieldNAME.setShouldAllowNull(true);
        table.addField(fieldNAME);

        return table;
    }

    public TableDefinition buildPERSONELCLUBTable() {
        TableDefinition table = new TableDefinition();
        table.setName("TPC_PERSONEL_CLUB");

        FieldDefinition fieldPERSONELID = new FieldDefinition();
        fieldPERSONELID.setName("PERSONEL_ID");
        fieldPERSONELID.setTypeName("NUMERIC");
        fieldPERSONELID.setSize(10);
        fieldPERSONELID.setShouldAllowNull(false);
        fieldPERSONELID.setIsPrimaryKey(true);
        fieldPERSONELID.setUnique(false);
        fieldPERSONELID.setIsIdentity(false);
        // Can't set foreign key field constraints.
        //fieldPERSONELID.setForeignKeyFieldName("CMP3_PERSONEL.ID");
        table.addField(fieldPERSONELID);

        FieldDefinition fieldCLUBID = new FieldDefinition();
        fieldCLUBID.setName("CLUB_ID");
        fieldCLUBID.setTypeName("NUMERIC");
        fieldCLUBID.setSize(10);
        fieldCLUBID.setShouldAllowNull(false);
        fieldCLUBID.setIsPrimaryKey(true);
        fieldCLUBID.setUnique(false);
        fieldCLUBID.setIsIdentity(false);
        // Can't set foreign key field constraints.
        //fieldCLUBID.setForeignKeyFieldName("CMP3_SOCIAL_CLUB.ID");
        table.addField(fieldCLUBID);

        return table;
    }

    public TableDefinition buildNICKNAMESTable() {
        TableDefinition table = new TableDefinition();
        table.setName("TPC_NICKNAMES");

        FieldDefinition fieldPERSONELID = new FieldDefinition();
        fieldPERSONELID.setName("PERSONEL_ID");
        fieldPERSONELID.setTypeName("NUMERIC");
        fieldPERSONELID.setSize(10);
        fieldPERSONELID.setShouldAllowNull(false);
        fieldPERSONELID.setIsPrimaryKey(true);
        fieldPERSONELID.setUnique(false);
        fieldPERSONELID.setIsIdentity(false);
        // Can't set foreign key field constraints.
        //fieldPERSONELID.setForeignKeyFieldName("CMP3_PERSONEL.ID");
        table.addField(fieldPERSONELID);

        FieldDefinition fieldNICKNAME = new FieldDefinition();
        fieldNICKNAME.setName("NICKNAME");
        fieldNICKNAME.setTypeName("VARCHAR");
        fieldNICKNAME.setSize(50);
        fieldNICKNAME.setShouldAllowNull(false);
        fieldNICKNAME.setIsPrimaryKey(true);
        fieldNICKNAME.setUnique(false);
        fieldNICKNAME.setIsIdentity(false);
        table.addField(fieldNICKNAME);

        return table;
    }

    public TableDefinition buildSMALLASSIGNMENTTable() {
        TableDefinition table = new TableDefinition();
        table.setName("TPC_SMALL_ASSIGNMENT");

        FieldDefinition fieldSMALLID = new FieldDefinition();
        fieldSMALLID.setName("SMALL_ID");
        fieldSMALLID.setTypeName("NUMERIC");
        fieldSMALLID.setSize(10);
        fieldSMALLID.setShouldAllowNull(false);
        fieldSMALLID.setIsPrimaryKey(true);
        fieldSMALLID.setUnique(false);
        fieldSMALLID.setIsIdentity(false);
        table.addField(fieldSMALLID);

        FieldDefinition fieldNAME = new FieldDefinition();
        fieldNAME.setName("NAME");
        fieldNAME.setTypeName("VARCHAR");
        fieldNAME.setSize(50);
        fieldNAME.setIsPrimaryKey(false);
        fieldNAME.setIsIdentity(false);
        fieldNAME.setUnique(false);
        fieldNAME.setShouldAllowNull(true);
        table.addField(fieldNAME);

        return table;
    }

    public TableDefinition buildCMP3_SEEDED_FRUITTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_SEEDED_FRUIT");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(10);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldNAME = new FieldDefinition();
        fieldNAME.setName("NAME");
        fieldNAME.setTypeName("VARCHAR");
        fieldNAME.setSize(255);
        fieldNAME.setIsPrimaryKey(false);
        fieldNAME.setIsIdentity(false);
        fieldNAME.setUnique(false);
        fieldNAME.setShouldAllowNull(true);
        table.addField(fieldNAME);

        FieldDefinition fieldCLASS_TYPE = new FieldDefinition();
        fieldCLASS_TYPE.setName("CLASS_TYPE");
        fieldCLASS_TYPE.setTypeName("VARCHAR");
        fieldCLASS_TYPE.setSize(1);
        fieldCLASS_TYPE.setIsPrimaryKey(false);
        fieldCLASS_TYPE.setIsIdentity(false);
        fieldCLASS_TYPE.setUnique(false);
        fieldCLASS_TYPE.setShouldAllowNull(true);
        table.addField(fieldCLASS_TYPE);

        return table;
    }

    public TableDefinition buildCMP3_CITRUS_FRUITTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_CITRUS_FRUIT");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(10);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        fieldID.setForeignKeyFieldName("CMP3_SEEDED_FRUIT.ID");
        table.addField(fieldID);

        FieldDefinition fieldGRADE = new FieldDefinition();
        fieldGRADE.setName("GRADE");
        fieldGRADE.setTypeName("NUMBER");
        fieldGRADE.setSize(10);
        fieldGRADE.setIsPrimaryKey(false);
        fieldGRADE.setIsIdentity(false);
        fieldGRADE.setUnique(false);
        fieldGRADE.setShouldAllowNull(true);
        table.addField(fieldGRADE);

        return table;
    }

    public TableDefinition buildCMP3_SEEDTable() {
        TableDefinition table = new TableDefinition();
        table.setName("CMP3_SEED");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(10);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldNAME = new FieldDefinition();
        fieldNAME.setName("NAME");
        fieldNAME.setTypeName("VARCHAR");
        fieldNAME.setSize(64);
        fieldNAME.setIsPrimaryKey(false);
        fieldNAME.setIsIdentity(false);
        fieldNAME.setUnique(false);
        fieldNAME.setShouldAllowNull(true);
        table.addField(fieldNAME);

        FieldDefinition fieldSEEDEDFRUIT_ID = new FieldDefinition();
        fieldSEEDEDFRUIT_ID.setName("SEEDEDFRUIT_ID");
        fieldSEEDEDFRUIT_ID.setTypeName("NUMBER");
        fieldSEEDEDFRUIT_ID.setSize(10);
        fieldSEEDEDFRUIT_ID.setIsPrimaryKey(false);
        fieldSEEDEDFRUIT_ID.setIsIdentity(false);
        fieldSEEDEDFRUIT_ID.setUnique(false);
        fieldSEEDEDFRUIT_ID.setShouldAllowNull(true);
        fieldSEEDEDFRUIT_ID.setForeignKeyFieldName("CMP3_SEEDED_FRUIT.ID");
        table.addField(fieldSEEDEDFRUIT_ID);

        return table;
    }

    public TableDefinition buildJPA_FISHTable() {
        TableDefinition table = new TableDefinition();
        table.setName("JPA_FISH");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(10);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldNAME = new FieldDefinition();
        fieldNAME.setName("NAME");
        fieldNAME.setTypeName("VARCHAR");
        fieldNAME.setSize(64);
        fieldNAME.setIsPrimaryKey(false);
        fieldNAME.setIsIdentity(false);
        fieldNAME.setUnique(false);
        fieldNAME.setShouldAllowNull(true);
        table.addField(fieldNAME);

        FieldDefinition fieldTYPE = new FieldDefinition();
        fieldTYPE.setName("TYPE");
        fieldTYPE.setTypeName("VARCHAR");
        fieldTYPE.setSize(1);
        fieldTYPE.setIsPrimaryKey(false);
        fieldTYPE.setIsIdentity(false);
        fieldTYPE.setUnique(false);
        fieldTYPE.setShouldAllowNull(true);
        table.addField(fieldTYPE);

        FieldDefinition fieldVERSION = new FieldDefinition();
        fieldVERSION.setName("VERSION");
        fieldVERSION.setTypeName("NUMBER");
        fieldVERSION.setSize(10);
        fieldVERSION.setShouldAllowNull(true);
        fieldVERSION.setIsPrimaryKey(false);
        fieldVERSION.setUnique(false);
        fieldVERSION.setIsIdentity(false);
        table.addField(fieldVERSION);

        FieldDefinition fieldTANK_ID = new FieldDefinition();
        fieldTANK_ID.setName("TANK_ID");
        fieldTANK_ID.setTypeName("NUMBER");
        fieldTANK_ID.setSize(10);
        fieldTANK_ID.setShouldAllowNull(true);
        fieldTANK_ID.setIsPrimaryKey(false);
        fieldTANK_ID.setUnique(false);
        fieldTANK_ID.setIsIdentity(false);
        table.addField(fieldTANK_ID);

        return table;
    }

    public TableDefinition buildJPA_FISH_TANKTable() {
        TableDefinition table = new TableDefinition();
        table.setName("JPA_FISH_TANK");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(10);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldVERSION = new FieldDefinition();
        fieldVERSION.setName("VERSION");
        fieldVERSION.setTypeName("NUMBER");
        fieldVERSION.setSize(10);
        fieldVERSION.setShouldAllowNull(true);
        fieldVERSION.setIsPrimaryKey(false);
        fieldVERSION.setUnique(false);
        fieldVERSION.setIsIdentity(false);
        table.addField(fieldVERSION);

        FieldDefinition fieldSTOREID = new FieldDefinition();
        fieldSTOREID.setName("STORE_ID");
        fieldSTOREID.setTypeName("NUMBER");
        fieldSTOREID.setSize(10);
        fieldSTOREID.setIsPrimaryKey(false);
        fieldSTOREID.setIsIdentity(false);
        fieldSTOREID.setUnique(false);
        fieldSTOREID.setShouldAllowNull(true);
        table.addField(fieldSTOREID);

        return table;
    }

    public TableDefinition buildJPA_BETTATable() {
        TableDefinition table = new TableDefinition();
        table.setName("JPA_BETTA");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(10);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldCOLOR = new FieldDefinition();
        fieldCOLOR.setName("COLOR");
        fieldCOLOR.setTypeName("VARCHAR");
        fieldCOLOR.setSize(64);
        fieldCOLOR.setIsPrimaryKey(false);
        fieldCOLOR.setIsIdentity(false);
        fieldCOLOR.setUnique(false);
        fieldCOLOR.setShouldAllowNull(true);
        table.addField(fieldCOLOR);

        return table;
    }

    public TableDefinition buildJPA_PET_STORETable() {
        TableDefinition table = new TableDefinition();
        table.setName("JPA_PET_STORE");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(10);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldVERSION = new FieldDefinition();
        fieldVERSION.setName("VERSION");
        fieldVERSION.setTypeName("NUMBER");
        fieldVERSION.setSize(10);
        fieldVERSION.setShouldAllowNull(true);
        fieldVERSION.setIsPrimaryKey(false);
        fieldVERSION.setUnique(false);
        fieldVERSION.setIsIdentity(false);
        table.addField(fieldVERSION);

        FieldDefinition fieldSTORENAME = new FieldDefinition();
        fieldSTORENAME.setName("STORE_NAME");
        fieldSTORENAME.setTypeName("VARCHAR");
        fieldSTORENAME.setSize(64);
        fieldSTORENAME.setIsPrimaryKey(false);
        fieldSTORENAME.setIsIdentity(false);
        fieldSTORENAME.setUnique(false);
        fieldSTORENAME.setShouldAllowNull(true);
        table.addField(fieldSTORENAME);

        return table;
    }

    /**
     * Dropping old foreign keys from schema change.
     */
    public void replaceTables(DatabaseSession session) {
        try {
            if (session.getPlatform().supportsUniqueKeyConstraints()
                    && !session.getPlatform().requiresUniqueConstraintCreationOnTableCreate()) {
                if (!session.getPlatform().isMySQL()) {
                    session.executeNonSelectingSQL("Alter table CMP3_ENGINEER_LAPTOP drop constraint CMP3_ENGINEER_LAPTOP_FK1");
                }
            }
        } catch (Exception ignore) {}
        super.replaceTables(session);
    }
}
