Package org.apache.openjpa.jdbc.schema
Class SchemaTool
java.lang.Object
org.apache.openjpa.jdbc.schema.SchemaTool
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
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final JDBCConfigurationprotected final DBDictionaryprotected final DataSourceprotected booleanprotected static final Localizerprotected final Logprotected Stringprotected Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final String[] -
Constructor Summary
ConstructorsConstructorDescriptionSchemaTool(JDBCConfiguration conf) Default constructor.SchemaTool(JDBCConfiguration conf, String action) Construct a tool to perform the given action. -
Method Summary
Modifier and TypeMethodDescriptionprotected 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.booleanAdd the given column to the database schema.booleanAdd the given foreign key to the database schema.booleanAdd the given primary key to the database schema.protected SchemaGroupprotected 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 voidIssue 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.booleanDrop the given foreign key from the database schema.booleanDrop the given index from the database schema.booleanDrop the given primary key from the database schema.protected voidDrops all schema components in the schema repository.booleandropSequence(Sequence seq) Drop the given sequence from the database schema.booleanDrop 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 voidprotected 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 IndexFind an index in the given table that matches the given one.The action supplied on construction.Return the database schema.protected SchemaGroupgetDBSchemaGroup(boolean full) Return the database schema.booleanIf true, sequences that appear to be unused will be dropped.booleanIf true, tables that appear to be unused will be dropped.booleanWhether foreign keys on existing tables should be manipulated.booleanIf true, SQLExceptions thrown during schema manipulation will be printed but ignored.booleanWhether indexes on existing tables should be manipulated.booleanWhether to act on special tables used by OpenJPA components for bookkeeping.booleanWhether primary keys on existing tables should be manipulated.booleanIf true, rollback will be performed before each DDL statement is executed.Return the schema group the tool will act on.booleanWhether sequences should be manipulated.The stream to write to for the creation of SQL scripts.protected voidHandle 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 voidUsage: 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.voidSet 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.voidvoidThe stream to write to for the creation of SQL scripts.
-
Field Details
-
ACTION_ADD
- See Also:
-
ACTION_DROP
- See Also:
-
ACTION_DROP_SCHEMA
- See Also:
-
ACTION_RETAIN
- See Also:
-
ACTION_REFRESH
- See Also:
-
ACTION_BUILD
- See Also:
-
ACTION_REFLECT
- See Also:
-
ACTION_CREATEDB
- See Also:
-
ACTION_DROPDB
- See Also:
-
ACTION_IMPORT
- See Also:
-
ACTION_EXPORT
- See Also:
-
ACTION_DELETE_TABLE_CONTENTS
- See Also:
-
ACTION_EXECUTE_SCRIPT
- See Also:
-
ACTIONS
-
_loc
-
_conf
-
_ds
-
_log
-
_dict
-
_fullDB
protected boolean _fullDB -
_sqlTerminator
-
_scriptToExecute
-
-
Constructor Details
-
SchemaTool
Default constructor. Tools constructed this way will not have an action, so therun()method will be a no-op. -
SchemaTool
Construct a tool to perform the given action.
-
-
Method Details
-
clear
public void clear()Cleanup DataSource after run()/record() -
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
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
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
-
setScriptToExecute
-
getSchemaGroup
Return the schema group the tool will act on. -
setSchemaGroup
Set the schema group the tool will act on. -
run
Run the tool action.- Throws:
SQLException
-
add
Adds any components present in the schema repository but absent from the database.- Throws:
SQLException
-
drop
Drops all schema components in the schema repository that also exist in the database.- Throws:
SQLException
-
dropSchema
Drops all schema components in the schema repository.- Throws:
SQLException
-
retain
Drops database components that are not mentioned in the schema repository.- Throws:
SQLException
-
refresh
Adds any components present in the schema repository but absent from the database, and drops unused database components.- Throws:
SQLException
-
createDB
Re-execute all SQL used for the creation of the current database; this action is usually used when creating SQL scripts.- Throws:
SQLException
-
build
Re-execute all SQL used for the creation of the current database; this action is usually used when creating SQL scripts.- Throws:
SQLException
-
dropDB
Drop the current database.- Throws:
SQLException
-
deleteTableContents
Issue DELETE statement against all known tables.- Throws:
SQLException
-
executeScript
- Throws:
SQLException
-
record
public void record()Record the changes made to the DB in the currentSchemaFactory. -
add
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
- Throws:
SQLException
-
isDroppable
Return true if the table is droppable. -
isDroppable
Return true if the sequence is droppable. -
findIndex
Find an index in the given table that matches the given one. -
findForeignKey
Find a foreign key in the given table that matches the given one. -
dropTables
Remove the given collection of tables from the database schema. Orders the removals according to foreign key constraints on the tables.- Throws:
SQLException
-
createTable
Add the given table to the database schema.- Returns:
- true if the operation was successful, false otherwise
- Throws:
SQLException
-
dropTable
Drop the given table from the database schema.- Returns:
- true if the operation was successful, false otherwise
- Throws:
SQLException
-
createSequence
Add the given sequence to the database schema.- Returns:
- true if the operation was successful, false otherwise
- Throws:
SQLException
-
dropSequence
Drop the given sequence from the database schema.- Returns:
- true if the operation was successful, false otherwise
- Throws:
SQLException
-
createIndex
Add the given index to the database schema.- Returns:
- true if the operation was successful, false otherwise
- Throws:
SQLException
-
createIndex
- Throws:
SQLException
-
dropIndex
Drop the given index from the database schema.- Returns:
- true if the operation was successful, false otherwise
- Throws:
SQLException
-
addColumn
Add the given column to the database schema.- Returns:
- true if the operation was successful, false otherwise
- Throws:
SQLException
-
dropColumn
Drop the given column from the database schema.- Returns:
- true if the operation was successful, false otherwise
- Throws:
SQLException
-
addPrimaryKey
Add the given primary key to the database schema.- Returns:
- true if the operation was successful, false otherwise
- Throws:
SQLException
-
dropPrimaryKey
Drop the given primary key from the database schema.- Returns:
- true if the operation was successful, false otherwise
- Throws:
SQLException
-
addForeignKey
Add the given foreign key to the database schema.- Returns:
- true if the operation was successful, false otherwise
- Throws:
SQLException
-
dropForeignKey
Drop the given foreign key from the database schema.- Returns:
- true if the operation was successful, false otherwise
- Throws:
SQLException
-
getDBSchemaGroup
Return the database schema. -
setDBSchemaGroup
Set the database schema. -
getDBSchemaGroup
Return the database schema.- Parameters:
full- if false, only the tables named in the set schema repository will be generated- Throws:
SQLException
-
assertSchemaGroup
-
executeSQL
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
Handle the given exception, logging it and optionally ignoring it, depending on the flags this SchemaTool was created with.- Throws:
SQLException
-
main
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:
-
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
-