Package org.apache.openjpa.jdbc.schema
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 JDBCDatabaseMetaDatadoes not include information on these constraints.- Author:
- Abe White, Patrick Linskey
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classSchemaTool.FlagsRun flags.
-
Field Summary
Fields Modifier and Type Field Description protected JDBCConfiguration_confprotected DBDictionary_dictprotected DataSource_dsprotected boolean_fullDBprotected static Localizer_locprotected Log_logprotected String_scriptToExecuteprotected String_sqlTerminatorstatic StringACTION_ADDstatic StringACTION_BUILDstatic StringACTION_CREATEDBstatic StringACTION_DELETE_TABLE_CONTENTSstatic StringACTION_DROPstatic StringACTION_DROP_SCHEMAstatic StringACTION_DROPDBstatic StringACTION_EXECUTE_SCRIPTstatic StringACTION_EXPORTstatic StringACTION_IMPORTstatic StringACTION_REFLECTstatic StringACTION_REFRESHstatic StringACTION_RETAINstatic String[]ACTIONS
-
Constructor Summary
Constructors Constructor Description SchemaTool(JDBCConfiguration conf)Default constructor.SchemaTool(JDBCConfiguration conf, String action)Construct a tool to perform the given action.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidadd()Adds any components present in the schema repository but absent from the database.protected voidadd(SchemaGroup db, SchemaGroup repos)Adds all database components in the repository schema that are not present in the given database schema to the database.booleanaddColumn(Column col)Add the given column to the database schema.booleanaddForeignKey(ForeignKey fk)Add the given foreign key to the database schema.booleanaddPrimaryKey(PrimaryKey pk)Add the given primary key to the database schema.protected SchemaGroupassertSchemaGroup()protected voidbuild()Re-execute all SQL used for the creation of the current database; this action is usually used when creating SQL scripts.protected voidbuildSchema(SchemaGroup db, SchemaGroup repos, boolean considerDatabaseState)voidclear()Cleanup DataSource after run()/record()protected voidcreateDB()Re-execute all SQL used for the creation of the current database; this action is usually used when creating SQL scripts.booleancreateIndex(Index idx, Table table)Add the given index to the database schema.booleancreateIndex(Index idx, Table table, Unique[] uniques)booleancreateSequence(Sequence seq)Add the given sequence to the database schema.booleancreateTable(Table table)Add the given table to the database schema.protected voiddeleteTableContents()Issue DELETE statement against all known tables.protected voiddrop()Drops all schema components in the schema repository that also exist in the database.protected voiddrop(SchemaGroup db, SchemaGroup repos)booleandropColumn(Column col)Drop the given column from the database schema.protected voiddropDB()Drop the current database.booleandropForeignKey(ForeignKey fk)Drop the given foreign key from the database schema.booleandropIndex(Index idx)Drop the given index from the database schema.booleandropPrimaryKey(PrimaryKey pk)Drop the given primary key from the database schema.protected voiddropSchema()Drops all schema components in the schema repository.booleandropSequence(Sequence seq)Drop the given sequence from the database schema.booleandropTable(Table table)Drop the given table from the database schema.protected voiddropTables(Collection<Table> tables, SchemaGroup change)Remove the given collection of tables from the database schema.protected voidexecuteScript()protected booleanexecuteSQL(String[] sql)Executes the given array of non-selecting SQL statements, correctly logging the SQL calls and optionally ignoring errors.protected ForeignKeyfindForeignKey(Table dbTable, ForeignKey fk)Find a foreign key in the given table that matches the given one.protected IndexfindIndex(Table dbTable, Index idx)Find an index in the given table that matches the given one.StringgetAction()The action supplied on construction.SchemaGroupgetDBSchemaGroup()Return the database schema.protected SchemaGroupgetDBSchemaGroup(boolean full)Return the database schema.booleangetDropSequences()If true, sequences that appear to be unused will be dropped.booleangetDropTables()If true, tables that appear to be unused will be dropped.booleangetForeignKeys()Whether foreign keys on existing tables should be manipulated.booleangetIgnoreErrors()If true, SQLExceptions thrown during schema manipulation will be printed but ignored.booleangetIndexes()Whether indexes on existing tables should be manipulated.booleangetOpenJPATables()Whether to act on special tables used by OpenJPA components for bookkeeping.booleangetPrimaryKeys()Whether primary keys on existing tables should be manipulated.booleangetRollbackBeforeDDL()If true, rollback will be performed before each DDL statement is executed.SchemaGroupgetSchemaGroup()Return the schema group the tool will act on.booleangetSequences()Whether sequences should be manipulated.WritergetWriter()The stream to write to for the creation of SQL scripts.protected voidhandleException(SQLException sql)Handle the given exception, logging it and optionally ignoring it, depending on the flags this SchemaTool was created with.protected booleanisDroppable(Sequence seq)Return true if the sequence is droppable.protected booleanisDroppable(Table table)Return true if the table is droppable.static voidmain(String[] args)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.voidrecord()Record the changes made to the DB in the currentSchemaFactory.protected voidrefresh()Adds any components present in the schema repository but absent from the database, and drops unused database components.protected voidretain()Drops database components that are not mentioned in the schema repository.protected voidretain(SchemaGroup db, SchemaGroup repos, boolean tables, boolean sequences)Drops all database components that are in the given database schema but not in the repository schema.voidrun()Run the tool action.static booleanrun(JDBCConfiguration conf, String[] args, SchemaTool.Flags flags, ClassLoader loader)Run the tool.static booleanrun(JDBCConfiguration conf, String[] args, Options opts)Run the tool.voidsetDBSchemaGroup(SchemaGroup db)Set the database schema.voidsetDropSequences(boolean dropSeqs)If true, sequences that appear to be unused will be dropped.voidsetDropTables(boolean dropTables)If true, tables that appear to be unused will be dropped.voidsetForeignKeys(boolean fks)Whether foreign keys on existing tables should be manipulated.voidsetIgnoreErrors(boolean ignoreErrs)If true, SQLExceptions thrown during schema manipulation will be printed but ignored.voidsetIndexes(boolean indexes)Whether indexes on existing tables should be manipulated.voidsetOpenJPATables(boolean openjpaTables)Whether to act on special tables used by OpenJPA components for bookkeeping.voidsetPrimaryKeys(boolean pks)Whether primary keys on existing tables should be manipulated.voidsetRollbackBeforeDDL(boolean rollbackBeforeDDL)If true, rollback will be performed before each DDL statement is executed.voidsetSchemaGroup(SchemaGroup group)Set the schema group the tool will act on.voidsetScriptToExecute(String scriptToExecute)voidsetSequences(boolean seqs)Whether sequences should be manipulated.voidsetSQLTerminator(String t)voidsetWriter(Writer writer)The stream to write to for the creation of SQL scripts.
-
-
-
Field Detail
-
ACTION_ADD
public static final String ACTION_ADD
- See Also:
- Constant Field Values
-
ACTION_DROP
public static final String ACTION_DROP
- See Also:
- Constant Field Values
-
ACTION_DROP_SCHEMA
public static final String ACTION_DROP_SCHEMA
- See Also:
- Constant Field Values
-
ACTION_RETAIN
public static final String ACTION_RETAIN
- See Also:
- Constant Field Values
-
ACTION_REFRESH
public static final String ACTION_REFRESH
- See Also:
- Constant Field Values
-
ACTION_BUILD
public static final String ACTION_BUILD
- See Also:
- Constant Field Values
-
ACTION_REFLECT
public static final String ACTION_REFLECT
- See Also:
- Constant Field Values
-
ACTION_CREATEDB
public static final String ACTION_CREATEDB
- See Also:
- Constant Field Values
-
ACTION_DROPDB
public static final String ACTION_DROPDB
- See Also:
- Constant Field Values
-
ACTION_IMPORT
public static final String ACTION_IMPORT
- See Also:
- Constant Field Values
-
ACTION_EXPORT
public static final String ACTION_EXPORT
- See Also:
- Constant Field Values
-
ACTION_DELETE_TABLE_CONTENTS
public static final String ACTION_DELETE_TABLE_CONTENTS
- See Also:
- Constant Field Values
-
ACTION_EXECUTE_SCRIPT
public static final String ACTION_EXECUTE_SCRIPT
- See Also:
- Constant Field Values
-
ACTIONS
public static final String[] ACTIONS
-
_loc
protected static final Localizer _loc
-
_conf
protected final JDBCConfiguration _conf
-
_ds
protected final DataSource _ds
-
_log
protected final Log _log
-
_dict
protected final DBDictionary _dict
-
_fullDB
protected boolean _fullDB
-
_sqlTerminator
protected String _sqlTerminator
-
_scriptToExecute
protected String _scriptToExecute
-
-
Constructor Detail
-
SchemaTool
public SchemaTool(JDBCConfiguration conf)
Default constructor. Tools constructed this way will not have an action, so therun()method will be a no-op.
-
SchemaTool
public SchemaTool(JDBCConfiguration conf, String action)
Construct a tool to perform the given action.
-
-
Method Detail
-
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 SQLExceptionRun the tool action.- Throws:
SQLException
-
add
protected void add() throws SQLExceptionAdds any components present in the schema repository but absent from the database.- Throws:
SQLException
-
drop
protected void drop() throws SQLExceptionDrops all schema components in the schema repository that also exist in the database.- Throws:
SQLException
-
dropSchema
protected void dropSchema() throws SQLExceptionDrops all schema components in the schema repository.- Throws:
SQLException
-
retain
protected void retain() throws SQLExceptionDrops database components that are not mentioned in the schema repository.- Throws:
SQLException
-
refresh
protected void refresh() throws SQLExceptionAdds any components present in the schema repository but absent from the database, and drops unused database components.- Throws:
SQLException
-
createDB
protected void createDB() throws SQLExceptionRe-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 SQLExceptionRe-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 SQLExceptionDrop the current database.- Throws:
SQLException
-
deleteTableContents
protected void deleteTableContents() throws SQLExceptionIssue 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 currentSchemaFactory.
-
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
JDBCConfigurationcan 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
exportandreflectactions. - -openjpaTables/-kt <true/t | false/f>: Under the
reflectaction, whether to reflect on tables with the nameOPENJPA_*. Under other actions, whether to drop such tables. Defaults tofalse. - -dropTables/-dt <true/t | false/f>: Set this option to
true to drop tables that appear to be unused during
retainandrefreshactions. Defaults totrue. - -dropSequences/-dsq <true/t | false/f>: Set this option
to true to drop sequences that appear to be unused during
retainandrefreshactions. Defaults totrue. - -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
falseto prevent writing the schema changes to the currentSchemaFactory.
- 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
fileoption. - 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
fileoption. - reflect: Reflect on the current database schema. Write the
schema's XML representation to the file specified with the
fileoption, 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.
- 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:
IOExceptionSQLException
- -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
-
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:
IOExceptionSQLException- See Also:
main(java.lang.String[])
-
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:
IOExceptionSQLException
-
-