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
-
Field Summary
Modifier and TypeFieldDescriptionprotected final JDBCConfiguration
protected final DBDictionary
protected final DataSource
protected boolean
protected static final Localizer
protected final Log
protected String
protected String
static final String
static final String
static final String
static final String
static final String
static final String
static final String
static final String
static final String
static final String
static final String
static final String
static final String
static final String[]
-
Constructor Summary
ConstructorDescriptionSchemaTool
(JDBCConfiguration conf) Default constructor.SchemaTool
(JDBCConfiguration conf, String action) Construct a tool to perform the given action. -
Method Summary
Modifier and TypeMethodDescriptionprotected void
add()
Adds any components present in the schema repository but absent from the database.protected void
add
(SchemaGroup db, SchemaGroup repos) Adds all database components in the repository schema that are not present in the given database schema to the database.boolean
Add the given column to the database schema.boolean
Add the given foreign key to the database schema.boolean
Add the given primary key to the database schema.protected SchemaGroup
protected void
build()
Re-execute all SQL used for the creation of the current database; this action is usually used when creating SQL scripts.protected void
buildSchema
(SchemaGroup db, SchemaGroup repos, boolean considerDatabaseState) void
clear()
Cleanup DataSource after run()/record()protected void
createDB()
Re-execute all SQL used for the creation of the current database; this action is usually used when creating SQL scripts.boolean
createIndex
(Index idx, Table table) Add the given index to the database schema.boolean
createIndex
(Index idx, Table table, Unique[] uniques) boolean
createSequence
(Sequence seq) Add the given sequence to the database schema.boolean
createTable
(Table table) Add the given table to the database schema.protected void
Issue DELETE statement against all known tables.protected void
drop()
Drops all schema components in the schema repository that also exist in the database.protected void
drop
(SchemaGroup db, SchemaGroup repos) boolean
dropColumn
(Column col) Drop the given column from the database schema.protected void
dropDB()
Drop the current database.boolean
Drop the given foreign key from the database schema.boolean
Drop the given index from the database schema.boolean
Drop the given primary key from the database schema.protected void
Drops all schema components in the schema repository.boolean
dropSequence
(Sequence seq) Drop the given sequence from the database schema.boolean
Drop the given table from the database schema.protected void
dropTables
(Collection<Table> tables, SchemaGroup change) Remove the given collection of tables from the database schema.protected void
protected boolean
executeSQL
(String[] sql) Executes the given array of non-selecting SQL statements, correctly logging the SQL calls and optionally ignoring errors.protected ForeignKey
findForeignKey
(Table dbTable, ForeignKey fk) Find a foreign key in the given table that matches the given one.protected Index
Find an index in the given table that matches the given one.The action supplied on construction.Return the database schema.protected SchemaGroup
getDBSchemaGroup
(boolean full) Return the database schema.boolean
If true, sequences that appear to be unused will be dropped.boolean
If true, tables that appear to be unused will be dropped.boolean
Whether foreign keys on existing tables should be manipulated.boolean
If true, SQLExceptions thrown during schema manipulation will be printed but ignored.boolean
Whether indexes on existing tables should be manipulated.boolean
Whether to act on special tables used by OpenJPA components for bookkeeping.boolean
Whether primary keys on existing tables should be manipulated.boolean
If true, rollback will be performed before each DDL statement is executed.Return the schema group the tool will act on.boolean
Whether sequences should be manipulated.The stream to write to for the creation of SQL scripts.protected void
Handle the given exception, logging it and optionally ignoring it, depending on the flags this SchemaTool was created with.protected boolean
isDroppable
(Sequence seq) Return true if the sequence is droppable.protected boolean
isDroppable
(Table table) Return true if the table is droppable.static void
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.void
record()
Record the changes made to the DB in the currentSchemaFactory
.protected void
refresh()
Adds any components present in the schema repository but absent from the database, and drops unused database components.protected void
retain()
Drops database components that are not mentioned in the schema repository.protected void
retain
(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.void
run()
Run the tool action.static boolean
run
(JDBCConfiguration conf, String[] args, SchemaTool.Flags flags, ClassLoader loader) Run the tool.static boolean
run
(JDBCConfiguration conf, String[] args, Options opts) Run the tool.void
Set the database schema.void
setDropSequences
(boolean dropSeqs) If true, sequences that appear to be unused will be dropped.void
setDropTables
(boolean dropTables) If true, tables that appear to be unused will be dropped.void
setForeignKeys
(boolean fks) Whether foreign keys on existing tables should be manipulated.void
setIgnoreErrors
(boolean ignoreErrs) If true, SQLExceptions thrown during schema manipulation will be printed but ignored.void
setIndexes
(boolean indexes) Whether indexes on existing tables should be manipulated.void
setOpenJPATables
(boolean openjpaTables) Whether to act on special tables used by OpenJPA components for bookkeeping.void
setPrimaryKeys
(boolean pks) Whether primary keys on existing tables should be manipulated.void
setRollbackBeforeDDL
(boolean rollbackBeforeDDL) If true, rollback will be performed before each DDL statement is executed.void
setSchemaGroup
(SchemaGroup group) Set the schema group the tool will act on.void
setScriptToExecute
(String scriptToExecute) void
setSequences
(boolean seqs) Whether sequences should be manipulated.void
void
The 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
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
andreflect
actions. - -openjpaTables/-kt <true/t | false/f>: Under the
reflect
action, 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
retain
andrefresh
actions. Defaults totrue
. - -dropSequences/-dsq <true/t | false/f>: Set this option
to true to drop sequences that appear to be unused during
retain
andrefresh
actions. 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
false
to 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
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.
- 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
- -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:
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
-