Class SchemaTool

java.lang.Object
org.apache.openjpa.jdbc.schema.SchemaTool

public class SchemaTool extends Object
The SchemaTool is used to manage the database schema. Note that the tool never adds or drops unique constraints from existing tables, because JDBC DatabaseMetaData does not include information on these constraints.
Author:
Abe White, Patrick Linskey
  • Field Details

  • Constructor Details

    • SchemaTool

      public SchemaTool(JDBCConfiguration conf)
      Default constructor. Tools constructed this way will not have an action, so the run() method will be a no-op.
    • SchemaTool

      public SchemaTool(JDBCConfiguration conf, String action)
      Construct a tool to perform the given action.
  • Method Details

    • clear

      public void clear()
      Cleanup DataSource after run()/record()
    • getAction

      public String getAction()
      The action supplied on construction.
    • getIgnoreErrors

      public boolean getIgnoreErrors()
      If true, SQLExceptions thrown during schema manipulation will be printed but ignored.
    • setIgnoreErrors

      public void setIgnoreErrors(boolean ignoreErrs)
      If true, SQLExceptions thrown during schema manipulation will be printed but ignored.
    • getOpenJPATables

      public boolean getOpenJPATables()
      Whether to act on special tables used by OpenJPA components for bookkeeping.
    • setOpenJPATables

      public void setOpenJPATables(boolean openjpaTables)
      Whether to act on special tables used by OpenJPA components for bookkeeping.
    • getDropTables

      public boolean getDropTables()
      If true, tables that appear to be unused will be dropped. Defaults to true.
    • setDropTables

      public void setDropTables(boolean dropTables)
      If true, tables that appear to be unused will be dropped. Defaults to true.
    • getDropSequences

      public boolean getDropSequences()
      If true, sequences that appear to be unused will be dropped. Defaults to true.
    • setDropSequences

      public void setDropSequences(boolean dropSeqs)
      If true, sequences that appear to be unused will be dropped. Defaults to true.
    • getRollbackBeforeDDL

      public boolean getRollbackBeforeDDL()
      If true, rollback will be performed before each DDL statement is executed. Defaults to true.
    • setRollbackBeforeDDL

      public void setRollbackBeforeDDL(boolean rollbackBeforeDDL)
      If true, rollback will be performed before each DDL statement is executed. Defaults to true.
    • getSequences

      public boolean getSequences()
      Whether sequences should be manipulated. Defaults to true.
    • setSequences

      public void setSequences(boolean seqs)
      Whether sequences should be manipulated. Defaults to true.
    • getIndexes

      public boolean getIndexes()
      Whether indexes on existing tables should be manipulated. Defaults to true.
    • setIndexes

      public void setIndexes(boolean indexes)
      Whether indexes on existing tables should be manipulated. Defaults to true.
    • getForeignKeys

      public boolean getForeignKeys()
      Whether foreign keys on existing tables should be manipulated. Defaults to true.
    • setForeignKeys

      public void setForeignKeys(boolean fks)
      Whether foreign keys on existing tables should be manipulated. Defaults to true.
    • getPrimaryKeys

      public boolean getPrimaryKeys()
      Whether primary keys on existing tables should be manipulated. Defaults to true.
    • setPrimaryKeys

      public void setPrimaryKeys(boolean pks)
      Whether primary keys on existing tables should be manipulated. Defaults to true.
    • getWriter

      public Writer getWriter()
      The stream to write to for the creation of SQL scripts. If the stream is non-null, all SQL will be written to this stream rather than executed against the database.
    • setWriter

      public void setWriter(Writer writer)
      The stream to write to for the creation of SQL scripts. If the stream is non-null, all SQL will be written to this stream rather than executed against the database.
    • setSQLTerminator

      public void setSQLTerminator(String t)
    • setScriptToExecute

      public void setScriptToExecute(String scriptToExecute)
    • getSchemaGroup

      public SchemaGroup getSchemaGroup()
      Return the schema group the tool will act on.
    • setSchemaGroup

      public void setSchemaGroup(SchemaGroup group)
      Set the schema group the tool will act on.
    • run

      public void run() throws SQLException
      Run the tool action.
      Throws:
      SQLException
    • add

      protected void add() throws SQLException
      Adds any components present in the schema repository but absent from the database.
      Throws:
      SQLException
    • drop

      protected void drop() throws SQLException
      Drops all schema components in the schema repository that also exist in the database.
      Throws:
      SQLException
    • dropSchema

      protected void dropSchema() throws SQLException
      Drops all schema components in the schema repository.
      Throws:
      SQLException
    • retain

      protected void retain() throws SQLException
      Drops database components that are not mentioned in the schema repository.
      Throws:
      SQLException
    • refresh

      protected void refresh() throws SQLException
      Adds any components present in the schema repository but absent from the database, and drops unused database components.
      Throws:
      SQLException
    • createDB

      protected void createDB() throws SQLException
      Re-execute all SQL used for the creation of the current database; this action is usually used when creating SQL scripts.
      Throws:
      SQLException
    • build

      protected void build() throws SQLException
      Re-execute all SQL used for the creation of the current database; this action is usually used when creating SQL scripts.
      Throws:
      SQLException
    • dropDB

      protected void dropDB() throws SQLException
      Drop the current database.
      Throws:
      SQLException
    • deleteTableContents

      protected void deleteTableContents() throws SQLException
      Issue DELETE statement against all known tables.
      Throws:
      SQLException
    • executeScript

      protected void executeScript() throws SQLException
      Throws:
      SQLException
    • record

      public void record()
      Record the changes made to the DB in the current SchemaFactory.
    • add

      protected void add(SchemaGroup db, SchemaGroup repos) throws SQLException
      Adds all database components in the repository schema that are not present in the given database schema to the database.
      Throws:
      SQLException
    • buildSchema

      protected void buildSchema(SchemaGroup db, SchemaGroup repos, boolean considerDatabaseState) throws SQLException
      Throws:
      SQLException
    • retain

      protected void retain(SchemaGroup db, SchemaGroup repos, boolean tables, boolean sequences) throws SQLException
      Drops all database components that are in the given database schema but not in the repository schema.
      Throws:
      SQLException
    • drop

      protected void drop(SchemaGroup db, SchemaGroup repos) throws SQLException
      Throws:
      SQLException
    • isDroppable

      protected boolean isDroppable(Table table)
      Return true if the table is droppable.
    • isDroppable

      protected boolean isDroppable(Sequence seq)
      Return true if the sequence is droppable.
    • findIndex

      protected Index findIndex(Table dbTable, Index idx)
      Find an index in the given table that matches the given one.
    • findForeignKey

      protected ForeignKey findForeignKey(Table dbTable, ForeignKey fk)
      Find a foreign key in the given table that matches the given one.
    • dropTables

      protected void dropTables(Collection<Table> tables, SchemaGroup change) throws SQLException
      Remove the given collection of tables from the database schema. Orders the removals according to foreign key constraints on the tables.
      Throws:
      SQLException
    • createTable

      public boolean createTable(Table table) throws SQLException
      Add the given table to the database schema.
      Returns:
      true if the operation was successful, false otherwise
      Throws:
      SQLException
    • dropTable

      public boolean dropTable(Table table) throws SQLException
      Drop the given table from the database schema.
      Returns:
      true if the operation was successful, false otherwise
      Throws:
      SQLException
    • createSequence

      public boolean createSequence(Sequence seq) throws SQLException
      Add the given sequence to the database schema.
      Returns:
      true if the operation was successful, false otherwise
      Throws:
      SQLException
    • dropSequence

      public boolean dropSequence(Sequence seq) throws SQLException
      Drop the given sequence from the database schema.
      Returns:
      true if the operation was successful, false otherwise
      Throws:
      SQLException
    • createIndex

      public boolean createIndex(Index idx, Table table) throws SQLException
      Add the given index to the database schema.
      Returns:
      true if the operation was successful, false otherwise
      Throws:
      SQLException
    • createIndex

      public boolean createIndex(Index idx, Table table, Unique[] uniques) throws SQLException
      Throws:
      SQLException
    • dropIndex

      public boolean dropIndex(Index idx) throws SQLException
      Drop the given index from the database schema.
      Returns:
      true if the operation was successful, false otherwise
      Throws:
      SQLException
    • addColumn

      public boolean addColumn(Column col) throws SQLException
      Add the given column to the database schema.
      Returns:
      true if the operation was successful, false otherwise
      Throws:
      SQLException
    • dropColumn

      public boolean dropColumn(Column col) throws SQLException
      Drop the given column from the database schema.
      Returns:
      true if the operation was successful, false otherwise
      Throws:
      SQLException
    • addPrimaryKey

      public boolean addPrimaryKey(PrimaryKey pk) throws SQLException
      Add the given primary key to the database schema.
      Returns:
      true if the operation was successful, false otherwise
      Throws:
      SQLException
    • dropPrimaryKey

      public boolean dropPrimaryKey(PrimaryKey pk) throws SQLException
      Drop the given primary key from the database schema.
      Returns:
      true if the operation was successful, false otherwise
      Throws:
      SQLException
    • addForeignKey

      public boolean addForeignKey(ForeignKey fk) throws SQLException
      Add the given foreign key to the database schema.
      Returns:
      true if the operation was successful, false otherwise
      Throws:
      SQLException
    • dropForeignKey

      public boolean dropForeignKey(ForeignKey fk) throws SQLException
      Drop the given foreign key from the database schema.
      Returns:
      true if the operation was successful, false otherwise
      Throws:
      SQLException
    • getDBSchemaGroup

      public SchemaGroup getDBSchemaGroup()
      Return the database schema.
    • setDBSchemaGroup

      public void setDBSchemaGroup(SchemaGroup db)
      Set the database schema.
    • getDBSchemaGroup

      protected SchemaGroup getDBSchemaGroup(boolean full) throws SQLException
      Return the database schema.
      Parameters:
      full - if false, only the tables named in the set schema repository will be generated
      Throws:
      SQLException
    • assertSchemaGroup

      protected SchemaGroup assertSchemaGroup()
    • executeSQL

      protected boolean executeSQL(String[] sql) throws SQLException
      Executes the given array of non-selecting SQL statements, correctly logging the SQL calls and optionally ignoring errors.
      Returns:
      true if there was SQL to execute and the calls were successful, false otherwise
      Throws:
      SQLException
    • handleException

      protected void handleException(SQLException sql) throws SQLException
      Handle the given exception, logging it and optionally ignoring it, depending on the flags this SchemaTool was created with.
      Throws:
      SQLException
    • main

      public static void main(String[] args) throws IOException, SQLException
      Usage: java org.apache.openjpa.jdbc.schema.SchemaTool [option]* [-action/-a <add | retain | drop | refresh | createDB | dropDB | build | reflect | import | export>] <.schema file or resource>* Where the following options are recognized.
      • -properties/-p <properties file or resource>: The path or resource name of a OpenJPA properties file containing information such as the license key and connection data as outlined in JDBCConfiguration. Optional.
      • -<property name> <property value>: All bean properties of the OpenJPA JDBCConfiguration can be set by using their names and supplying a value. For example: -licenseKey adslfja83r3lkadf
      • -ignoreErrors/-i <true/t | false/f>: If false, an exception will will be thrown if the tool encounters any database exceptions; defaults to false.
      • -file/-f <stdout | output file or resource>: Use this option to write a SQL script for the planned schema modifications, rather than committing them to the database. This option also applies to the export and reflect actions.
      • -openjpaTables/-kt <true/t | false/f>: Under the reflect action, whether to reflect on tables with the name OPENJPA_*. Under other actions, whether to drop such tables. Defaults to false.
      • -dropTables/-dt <true/t | false/f>: Set this option to true to drop tables that appear to be unused during retain and refresh actions. Defaults to true.
      • -dropSequences/-dsq <true/t | false/f>: Set this option to true to drop sequences that appear to be unused during retain and refresh actions. Defaults to true.
      • -rollbackBeforeDDL/-rbddl <true/t | false/f>: Set this option to true to send an initail rollback on the connection before any DDL statement is sent
      • -primaryKeys/-pk <true/t | false/f>: Whether primary keys on existing tables are manipulated. Defaults to true.
      • -foreignKeys/-fk <true/t | false/f>: Whether foreign keys on existing tables are manipulated. Defaults to true.
      • -indexes/-ix <true/t | false/f>: Whether indexes on existing tables are manipulated. Defaults to true.
      • -sequences/-sq <true/t | false/f>: Whether to manipulate sequences. Defaults to true.
      • -record/-r <true/t | false/f>: Set this option to false to prevent writing the schema changes to the current SchemaFactory.
      Actions can be composed in a comma-separated list. The various actions are as follows.
      • add: Bring the schema up-to-date with the latest changes to the schema XML data by adding tables, columns, indexes, etc. This action never drops any data. This is the default action.
      • retain: Keep all schema components in the schema XML, but drop the rest from the database. This action never adds any data.
      • drop: Drop all the schema components in the schema XML.
      • refresh: Equivalent to retain, then add.
      • createDB: Execute SQL to re-create the current database. This action is typically used in conjuction with the file option.
      • build: Execute SQL to build the schema defined in the XML. Because it doesn't take the current database schema into account, this action is typically used in conjuction with the file option.
      • reflect: Reflect on the current database schema. Write the schema's XML representation to the file specified with the file option, or to stdout if no file is given.
      • dropDB: Execute SQL to drop the current database. This action implies dropTables.
      • deleteTableContents: Execute SQL to delete all rows from all tables that OpenJPA knows about.
      • import: Import the given XML schema definition into the current SchemaFactory.
      • export: Export the current SchemaFactory's recorded schema to an XML schema definition file.
      Examples:
      • Write a script to stdout to re-create the current database schema:
        java org.apache.openjpa.jdbc.schema.SchemaTool -f stdout -a createDB
      • Drop the current database schema:
        java org.apache.openjpa.jdbc.schema.SchemaTool -a dropDB
      • Refresh the schema and delete all records in all tables:
        java org.apache.openjpa.jdbc.schema.SchemaTool -a refresh,deleteTableContents
      • Create a schema based on an XML schema definition file:
        java org.apache.openjpa.jdbc.schema.SchemaTool myschema.xml
      Throws:
      IOException
      SQLException
    • run

      public static boolean run(JDBCConfiguration conf, String[] args, Options opts) throws IOException, SQLException
      Run the tool. Returns false if any invalid options were given.
      Throws:
      IOException
      SQLException
      See Also:
    • run

      public static boolean run(JDBCConfiguration conf, String[] args, SchemaTool.Flags flags, ClassLoader loader) throws IOException, SQLException
      Run the tool. Return false if invalid options were given.
      Throws:
      IOException
      SQLException