You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by rm...@apache.org on 2016/11/19 18:08:44 UTC

svn commit: r1770509 - in /openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/ openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/ openjpa-jdbc/src/main/resources/org...

Author: rmannibucau
Date: Sat Nov 19 18:08:44 2016
New Revision: 1770509

URL: http://svn.apache.org/viewvc?rev=1770509&view=rev
Log:
OPENJPA-2554 JPA 2.1 - Schema Generation, patch from Roberto Cortez, doc to update still

Added:
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/SchemaGenerationAction.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/SchemaGenerationSource.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/schema/TestSchemaGenerationProperties.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/
    openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/create-after-metadata.sql
    openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/create.sql
    openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/drop-after-metadata.sql
    openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/drop.sql
    openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/load.sql
Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCBrokerFactory.java
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingTool.java
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java
    openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/schema/localizer.properties
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfiguration.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCBrokerFactory.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCBrokerFactory.java?rev=1770509&r1=1770508&r2=1770509&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCBrokerFactory.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCBrokerFactory.java Sat Nov 19 18:08:44 2016
@@ -22,6 +22,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Map;
 
+import org.apache.openjpa.conf.SchemaGenerationSource;
 import org.apache.openjpa.lib.util.StringUtil;
 import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
 import org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl;
@@ -36,6 +37,19 @@ import org.apache.openjpa.lib.conf.Confi
 import org.apache.openjpa.lib.util.Localizer;
 import org.apache.openjpa.util.UserException;
 
+import static org.apache.openjpa.conf.SchemaGenerationAction.CREATE;
+import static org.apache.openjpa.conf.SchemaGenerationAction.DROP;
+import static org.apache.openjpa.conf.SchemaGenerationAction.DROP_AND_CREATE;
+import static org.apache.openjpa.conf.SchemaGenerationSource.METADATA;
+import static org.apache.openjpa.conf.SchemaGenerationSource.METADATA_THEN_SCRIPT;
+import static org.apache.openjpa.conf.SchemaGenerationSource.SCRIPT;
+import static org.apache.openjpa.conf.SchemaGenerationSource.SCRIPT_THEN_METADATA;
+import static org.apache.openjpa.jdbc.meta.MappingTool.ACTION_ADD;
+import static org.apache.openjpa.jdbc.meta.MappingTool.ACTION_DROP;
+import static org.apache.openjpa.jdbc.meta.MappingTool.ACTION_SCRIPT_CREATE;
+import static org.apache.openjpa.jdbc.meta.MappingTool.ACTION_SCRIPT_DROP;
+import static org.apache.openjpa.jdbc.meta.MappingTool.ACTION_SCRIPT_LOAD;
+
 /**
  * BrokerFactory type for use with the JDBC runtime.
  *
@@ -133,6 +147,7 @@ public class JDBCBrokerFactory
      */
     protected void synchronizeMappings(ClassLoader loader, 
         JDBCConfiguration conf) {
+        mapSchemaGenerationToSynchronizeMappings(conf);
         String action = conf.getSynchronizeMappings();
         if (StringUtil.isEmpty(action))
             return;
@@ -163,4 +178,80 @@ public class JDBCBrokerFactory
     protected void synchronizeMappings(ClassLoader loader) {
         synchronizeMappings(loader, (JDBCConfiguration) getConfiguration());
     }
+
+    private void mapSchemaGenerationToSynchronizeMappings(JDBCConfiguration conf) {
+        String actions = "";
+        if (conf.getDatabaseAction() != null) {
+            int databaseAction = conf.getDatabaseActionConstant();
+            if (databaseAction == CREATE) {
+                actions = generateSchemaCreation(conf);
+            } else if (databaseAction == DROP) {
+                actions = generateSchemaDrop(conf);
+            } else if (databaseAction == DROP_AND_CREATE) {
+                actions = generateSchemaDropCreate(conf);
+            }
+        }
+
+        String loadFile = conf.getLoadScriptSource();
+        if (loadFile != null) {
+            actions += "," + ACTION_SCRIPT_LOAD;
+        }
+
+        if (actions.length() > 0) {
+            conf.setSynchronizeMappings("buildSchema(ForeignKeys=true,SchemaAction='" + actions + "')");
+        }
+    }
+
+    private String generateSchemaCreation(JDBCConfiguration conf) {
+        if (conf.getCreateScriptTarget() != null) {
+            return MappingTool.ACTION_ADD;
+        } else {
+            int createSource = conf.getCreateSourceConstant();
+            if (createSource == SchemaGenerationSource.NONE && conf.getCreateScriptSource() != null) {
+                createSource = SCRIPT;
+            } else {
+                createSource = METADATA;
+            }
+            return mapGenerationStrategyActions(createSource, ACTION_ADD, ACTION_SCRIPT_CREATE);
+        }
+    }
+
+    private String generateSchemaDrop(JDBCConfiguration conf) {
+        if (conf.getDropScriptTarget() != null) {
+            return MappingTool.ACTION_DROP;
+        } else {
+            int dropSource = conf.getDropSourceConstant();
+            if (dropSource == SchemaGenerationSource.NONE && conf.getDropScriptSource() != null) {
+                dropSource = SCRIPT;
+            } else {
+                dropSource = METADATA;
+            }
+            return mapGenerationStrategyActions(dropSource, ACTION_DROP, ACTION_SCRIPT_DROP);
+        }
+    }
+
+    private String generateSchemaDropCreate(JDBCConfiguration conf) {
+        if (conf.getCreateScriptTarget() != null && conf.getDropScriptTarget() != null) {
+            return MappingTool.ACTION_ADD + "," + MappingTool.ACTION_DROP;
+        } else {
+            return mapGenerationStrategyActions(conf.getDropSourceConstant(), ACTION_DROP, ACTION_SCRIPT_DROP) + "," +
+                   mapGenerationStrategyActions(conf.getCreateSourceConstant(), ACTION_ADD, ACTION_SCRIPT_CREATE);
+        }
+    }
+
+    private String mapGenerationStrategyActions(int source, String metadataAction, String scriptAction) {
+        String actions = "";
+        if (source == METADATA) {
+            actions += metadataAction;
+        } else if (source == SCRIPT) {
+            actions += scriptAction;
+        } else if (source == METADATA_THEN_SCRIPT) {
+            actions += metadataAction + "," + scriptAction;
+        } else if (source == SCRIPT_THEN_METADATA) {
+            actions += scriptAction + "," + metadataAction;
+        } else {
+            actions += metadataAction;
+        }
+        return actions;
+    }
 }

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingTool.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingTool.java?rev=1770509&r1=1770508&r2=1770509&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingTool.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingTool.java Sat Nov 19 18:08:44 2016
@@ -90,6 +90,9 @@ public class MappingTool
     public static final String ACTION_VALIDATE = "validate";
     public static final String ACTION_EXPORT = "export";
     public static final String ACTION_IMPORT = "import";
+    public static final String ACTION_SCRIPT_CREATE = "scriptCreate";
+    public static final String ACTION_SCRIPT_DROP = "scriptDrop";
+    public static final String ACTION_SCRIPT_LOAD = "scriptLoad";
 
     public static final String[] ACTIONS = new String[]{
         ACTION_ADD,
@@ -100,6 +103,9 @@ public class MappingTool
         ACTION_VALIDATE,
         ACTION_EXPORT,
         ACTION_IMPORT,
+        ACTION_SCRIPT_CREATE,
+        ACTION_SCRIPT_DROP,
+        ACTION_SCRIPT_LOAD,
     };
 
     private static final Localizer _loc = Localizer.forPackage(MappingTool.class);
@@ -502,7 +508,26 @@ public class MappingTool
                     if (!SCHEMA_ACTION_NONE.equals(schemaActions[i])
                         && (_schemaWriter == null || (_schemaTool != null
                             && _schemaTool.getWriter() != null))) {
-                        SchemaTool tool = newSchemaTool(schemaActions[i]);
+
+                        SchemaTool tool;
+                        if (schemaActions[i].equals(ACTION_SCRIPT_CREATE) ||
+                            schemaActions[i].equals(ACTION_SCRIPT_DROP) ||
+                            schemaActions[i].equals(ACTION_SCRIPT_LOAD)) {
+                            tool = newSchemaTool(SchemaTool.ACTION_EXECUTE_SCRIPT);
+                        } else {
+                            tool = newSchemaTool(schemaActions[i]);
+                        }
+
+                        if (schemaActions[i].equals(ACTION_ADD) && _conf.getCreateScriptTarget() != null) {
+                            tool.setWriter(new PrintWriter(_conf.getCreateScriptTarget()));
+                            tool.setIndexes(true);
+                            tool.setForeignKeys(true);
+                            tool.setSequences(true);
+                        }
+
+                        if (schemaActions[i].equals(ACTION_DROP) && _conf.getDropScriptTarget() != null) {
+                            tool.setWriter(new PrintWriter(_conf.getDropScriptTarget()));
+                        }
 
                         // configure the tool with additional settings
                         if (flags != null) {
@@ -513,6 +538,18 @@ public class MappingTool
                             tool.setSQLTerminator(flags.sqlTerminator);
                         }
 
+                        switch (schemaActions[i]) {
+                            case ACTION_SCRIPT_CREATE:
+                                tool.setScriptToExecute(_conf.getCreateScriptSource());
+                                break;
+                            case ACTION_SCRIPT_DROP:
+                                tool.setScriptToExecute(_conf.getDropScriptSource());
+                                break;
+                            case ACTION_SCRIPT_LOAD:
+                                tool.setScriptToExecute(_conf.getLoadScriptSource());
+                                break;
+                        }
+
                         tool.setSchemaGroup(getSchemaGroup());
                         tool.run();
                         tool.record();

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java?rev=1770509&r1=1770508&r2=1770509&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java Sat Nov 19 18:08:44 2016
@@ -18,23 +18,30 @@
  */
 package org.apache.openjpa.jdbc.schema;
 
+import java.io.BufferedReader;
 import java.io.File;
 import java.io.IOException;
+import java.io.InputStreamReader;
 import java.io.PrintWriter;
 import java.io.Writer;
+import java.net.URL;
+import java.security.AccessController;
 import java.sql.Connection;
 import java.sql.DatabaseMetaData;
 import java.sql.SQLException;
 import java.sql.Statement;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.Set;
 import javax.sql.DataSource;
 
+import org.apache.openjpa.lib.util.J2DoPrivHelper;
 import org.apache.openjpa.lib.util.StringUtil;
 import org.apache.openjpa.conf.OpenJPAConfiguration;
 import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
@@ -74,6 +81,7 @@ public class SchemaTool {
     public static final String ACTION_IMPORT = "import";
     public static final String ACTION_EXPORT = "export";
     public static final String ACTION_DELETE_TABLE_CONTENTS = "deleteTableContents";
+    public static final String ACTION_EXECUTE_SCRIPT = "executeScript";
 
     public static final String[] ACTIONS = new String[]{
         ACTION_ADD,
@@ -88,6 +96,7 @@ public class SchemaTool {
         ACTION_IMPORT,
         ACTION_EXPORT,
         ACTION_DELETE_TABLE_CONTENTS,
+        ACTION_EXECUTE_SCRIPT
     };
 
     protected static final Localizer _loc = Localizer.forPackage(SchemaTool.class);
@@ -110,7 +119,8 @@ public class SchemaTool {
     private SchemaGroup _db = null;
     protected boolean _fullDB = false;
     protected String _sqlTerminator = ";";
-    
+    protected String _scriptToExecute = null;
+
     /**
      * Default constructor. Tools constructed this way will not have an
      * action, so the {@link #run()} method will be a no-op.
@@ -313,6 +323,10 @@ public class SchemaTool {
     	_sqlTerminator = t;
     }
 
+    public void setScriptToExecute(String scriptToExecute) {
+        _scriptToExecute = scriptToExecute;
+    }
+
     /**
      * Return the schema group the tool will act on.
      */
@@ -357,6 +371,9 @@ public class SchemaTool {
             dropDB();
         else if (ACTION_DELETE_TABLE_CONTENTS.equals(_action))
             deleteTableContents();
+        else if (ACTION_EXECUTE_SCRIPT.equals(_action)) {
+            executeScript();
+        }
     }
 
     /**
@@ -463,6 +480,54 @@ public class SchemaTool {
         }
     }
 
+    protected void executeScript() throws SQLException {
+        if (_scriptToExecute == null) {
+            _log.warn(_loc.get("generating-execute-script-not-defined"));
+            return;
+        }
+
+        URL url = AccessController.doPrivileged(
+                J2DoPrivHelper.getResourceAction(_conf.getClassResolverInstance().
+                        getClassLoader(SchemaTool.class, null), _scriptToExecute));
+
+        if (url == null) {
+            _log.error(_loc.get("generating-execute-script-not-found", _scriptToExecute));
+            return;
+        }
+
+        _log.info(_loc.get("generating-execute-script", _scriptToExecute));
+        BufferedReader reader = null;
+        try {
+            reader = new BufferedReader(new InputStreamReader(url.openStream()));
+            String sql;
+            List<String> script = new ArrayList<String>();
+            while ((sql = reader.readLine()) != null) {
+                sql = sql.trim();
+                if (sql.startsWith("--") || sql.startsWith("/*") || sql.startsWith("//")) {
+                    continue;
+                }
+
+                int semiColonPosition = sql.indexOf(";");
+                if (semiColonPosition != -1) {
+                    sql = sql.substring(0, semiColonPosition);
+                }
+                script.add(sql);
+            }
+
+            executeSQL(script.toArray(new String[script.size()]));
+        } catch (IOException e) {
+            _log.error(e.getMessage(), e);
+        } finally {
+            try {
+                if (reader != null) {
+                    reader.close();
+                }
+            } catch (IOException e) {
+                _log.error(e.getMessage(), e);
+            }
+        }
+    }
+
     /**
      * Record the changes made to the DB in the current {@link SchemaFactory}.
      */
@@ -490,9 +555,11 @@ public class SchemaTool {
             for (int i = 0; i < schemas.length; i++) {
                 seqs = schemas[i].getSequences();
                 for (int j = 0; j < seqs.length; j++) {
-                    if (considerDatabaseState && db.findSequence(schemas[i], seqs[j].getQualifiedPath()) !=
-                            null)
-                        continue;
+                    if (considerDatabaseState && db.findSequence(schemas[i], seqs[j].getQualifiedPath()) != null) {
+                        if (_writer == null) {
+                            continue;
+                        }
+                    }
 
                     if (createSequence(seqs[j])) {
                         schema = db.getSchema(seqs[j].getSchemaIdentifier());
@@ -567,8 +634,11 @@ public class SchemaTool {
         for (int i = 0; i < schemas.length; i++) {
             tabs = schemas[i].getTables();
             for (int j = 0; j < tabs.length; j++) {
-                if (considerDatabaseState && db.findTable(schemas[i], tabs[j].getQualifiedPath()) != null)
-                    continue;
+                if (considerDatabaseState && db.findTable(schemas[i], tabs[j].getQualifiedPath()) != null) {
+                    if (_writer == null) {
+                        continue;
+                    }
+                }
 
                 if (createTable(tabs[j])) {
                     newTables.add(tabs[j]);
@@ -618,8 +688,11 @@ public class SchemaTool {
             tabs = schemas[i].getTables();
             for (int j = 0; j < tabs.length; j++) {
                 // create unique constraints only on new tables
-                if (!newTables.contains(tabs[j]))
-                    continue;
+                if (!newTables.contains(tabs[j])) {
+                    if (_writer == null) {
+                        continue;
+                    }
+                }
 
                 uniques = tabs[j].getUniques();
                 if (uniques == null || uniques.length == 0)
@@ -643,8 +716,11 @@ public class SchemaTool {
             for (int j = 0; j < tabs.length; j++) {
                 // create foreign keys on new tables even if fks
                 // have been turned off
-                if (!_fks && !newTables.contains(tabs[j]))
-                    continue;
+                if (!_fks && !newTables.contains(tabs[j])) {
+                    if (_writer == null) {
+                        continue;
+                    }
+                }
 
                 fks = tabs[j].getForeignKeys();
                 if (considerDatabaseState) {
@@ -822,6 +898,10 @@ public class SchemaTool {
                         else
                             _log.warn(_loc.get("drop-seq", seqs[j]));
                     }
+
+                    if (_writer != null) {
+                        dropSequence(seqs[j]);
+                    }
                 }
             }
         }
@@ -846,8 +926,12 @@ public class SchemaTool {
                 }
 
                 dbTable = db.findTable(tabs[j]);
-                if (dbTable == null)
+                if (dbTable == null) {
+                    if (_writer != null) {
+                        drops.add(tabs[j]);
+                    }
                     continue;
+                }
 
                 dbCols = dbTable.getColumns();
                 for (int k = 0; k < dbCols.length; k++) {

Modified: openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/schema/localizer.properties
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/schema/localizer.properties?rev=1770509&r1=1770508&r2=1770509&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/schema/localizer.properties (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/schema/localizer.properties Sat Nov 19 18:08:44 2016
@@ -147,6 +147,9 @@ generating-primary: Reading primary keys
 generating-indexes: Reading indexes for table "{1}"
 generating-foreign: Reading foreign keys for table "{1}"
 generating-sequences: Reading sequences for schema "{0}"
+generating-execute-script: Executing script "{0}".
+generating-execute-script-not-defined: A script needs to be indicated to execute, but no script was set in setScriptToExecute.
+generating-execute-script-not-found: Could not find script to execute "{0}"
 no-custom-ds: use a custom DataSource
 delete-table-contents: An error occurred while attempting to delete all \
     records from all mapped tables.

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfiguration.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfiguration.java?rev=1770509&r1=1770508&r2=1770509&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfiguration.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfiguration.java Sat Nov 19 18:08:44 2016
@@ -1788,7 +1788,7 @@ public interface OpenJPAConfiguration
     
     /**
      * Sets the {@link EncryptionProvider}.
-     * 
+     *
      */
     public void setEncryptionProvider(String className);
     
@@ -1983,5 +1983,31 @@ public interface OpenJPAConfiguration
        * @since 2.4.2
        */
       public void setUseTCCLinSelectNew(Boolean useTcclForSelectNew);
+
+    public String getDatabaseAction();
+
+    public int getDatabaseActionConstant();
+
+    String getScriptsAction();
+
+    int getScriptsActionConstant();
+
+    String getCreateSource();
+
+    int getCreateSourceConstant();
+
+    String getDropSource();
+
+    int getDropSourceConstant();
+
+    String getCreateScriptSource();
+
+    String getDropScriptSource();
+
+    String getCreateScriptTarget();
+
+    String getDropScriptTarget();
+
+    String getLoadScriptSource();
 }
 

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java?rev=1770509&r1=1770508&r2=1770509&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java Sat Nov 19 18:08:44 2016
@@ -178,6 +178,17 @@ public class OpenJPAConfigurationImpl
     public BooleanValue postLoadOnMerge;
     public BooleanValue optimizeIdCopy;
     public BooleanValue useTcclForSelectNew;
+
+    // JPA Properties
+    public IntValue databaseAction;
+    public IntValue scriptsAction;
+    public IntValue createSource;
+    public IntValue dropSource;
+    public StringValue createScriptSource;
+    public StringValue dropScriptSource;
+    public StringValue createScriptTarget;
+    public StringValue dropScriptTarget;
+    public StringValue loadScriptSource;
     
     // custom values
     public BrokerFactoryValue brokerFactoryPlugin;
@@ -406,7 +417,58 @@ public class OpenJPAConfigurationImpl
         optimizeIdCopy = addBoolean("OptimizeIdCopy");
         optimizeIdCopy.setDefault("false");
         optimizeIdCopy.set(false);
-        
+
+        databaseAction = addInt("javax.persistence.schema-generation.database.action");
+        aliases = new String[] {
+                "none", String.valueOf(SchemaGenerationAction.NONE),
+                "create", String.valueOf(SchemaGenerationAction.CREATE),
+                "drop-and-create", String.valueOf(SchemaGenerationAction.DROP_AND_CREATE),
+                "drop", String.valueOf(SchemaGenerationAction.DROP)
+        };
+        databaseAction.setAliases(aliases);
+        databaseAction.setDefault(aliases[0]);
+        databaseAction.setAliasListComprehensive(true);
+
+        scriptsAction = addInt("javax.persistence.schema-generation.scripts.action");
+        aliases = new String[] {
+                "none", String.valueOf(SchemaGenerationAction.NONE),
+                "create", String.valueOf(SchemaGenerationAction.CREATE),
+                "drop-and-create", String.valueOf(SchemaGenerationAction.DROP_AND_CREATE),
+                "drop", String.valueOf(SchemaGenerationAction.DROP)
+        };
+        scriptsAction.setAliases(aliases);
+        scriptsAction.setDefault(aliases[0]);
+        scriptsAction.setAliasListComprehensive(true);
+
+        createSource = addInt("javax.persistence.schema-generation.create-source");
+        aliases = new String[] {
+                "none", String.valueOf(SchemaGenerationSource.NONE),
+                "metadata", String.valueOf(SchemaGenerationSource.METADATA),
+                "script", String.valueOf(SchemaGenerationSource.SCRIPT),
+                "metadata-then-script", String.valueOf(SchemaGenerationSource.METADATA_THEN_SCRIPT),
+                "script-then-metadata", String.valueOf(SchemaGenerationSource.SCRIPT_THEN_METADATA)
+        };
+        createSource.setAliases(aliases);
+        createSource.setDefault(aliases[0]);
+        createSource.setAliasListComprehensive(true);
+
+        dropSource = addInt("javax.persistence.schema-generation.drop-source");
+        aliases = new String[] {
+                "metadata", String.valueOf(SchemaGenerationSource.METADATA),
+                "script", String.valueOf(SchemaGenerationSource.SCRIPT),
+                "metadata-then-script", String.valueOf(SchemaGenerationSource.METADATA_THEN_SCRIPT),
+                "script-then-metadata", String.valueOf(SchemaGenerationSource.SCRIPT_THEN_METADATA)
+        };
+        dropSource.setAliases(aliases);
+        dropSource.setDefault(aliases[0]);
+        dropSource.setAliasListComprehensive(true);
+
+        createScriptSource = addString("javax.persistence.schema-generation.create-script-source");
+        dropScriptSource = addString("javax.persistence.schema-generation.drop-script-source");
+        createScriptTarget = addString("javax.persistence.schema-generation.scripts.create-target");
+        dropScriptTarget = addString("javax.persistence.schema-generation.scripts.drop-target");
+        loadScriptSource = addString("javax.persistence.sql-load-script-source");
+
         autoClear = addInt("AutoClear");
         aliases =
             new String[] { "datastore",
@@ -1880,6 +1942,58 @@ public class OpenJPAConfigurationImpl
         }
     }
 
+    public String getDatabaseAction() {
+        return databaseAction.getString();
+    }
+
+    public int getDatabaseActionConstant() {
+        return databaseAction.get();
+    }
+
+    public String getScriptsAction() {
+        return scriptsAction.getString();
+    }
+
+    public int getScriptsActionConstant() {
+        return scriptsAction.get();
+    }
+
+    public String getCreateSource() {
+        return createSource.getString();
+    }
+
+    public int getCreateSourceConstant() {
+        return createSource.get();
+    }
+
+    public String getDropSource() {
+        return dropSource.getString();
+    }
+
+    public int getDropSourceConstant() {
+        return dropSource.get();
+    }
+
+    public String getCreateScriptSource() {
+        return createScriptSource.getString();
+    }
+
+    public String getDropScriptSource() {
+        return dropScriptSource.getString();
+    }
+
+    public String getCreateScriptTarget() {
+        return createScriptTarget.getString();
+    }
+
+    public String getDropScriptTarget() {
+        return dropScriptTarget.getString();
+    }
+
+    public String getLoadScriptSource() {
+        return loadScriptSource.getString();
+    }
+
     @Override
     public boolean getUseTCCLinSelectNew() {
         return useTcclForSelectNew.get();

Added: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/SchemaGenerationAction.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/SchemaGenerationAction.java?rev=1770509&view=auto
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/SchemaGenerationAction.java (added)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/SchemaGenerationAction.java Sat Nov 19 18:08:44 2016
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.conf;
+
+/**
+ * @author Roberto Cortez
+ */
+public interface SchemaGenerationAction {
+    public static final int NONE = 0;
+
+    public static final int CREATE = 1;
+
+    public static final int DROP_AND_CREATE = 2;
+
+    public static final int DROP = 3;
+}

Added: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/SchemaGenerationSource.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/SchemaGenerationSource.java?rev=1770509&view=auto
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/SchemaGenerationSource.java (added)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/SchemaGenerationSource.java Sat Nov 19 18:08:44 2016
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.conf;
+
+/**
+ * @author Roberto Cortez
+ */
+public interface SchemaGenerationSource {
+    public static final int NONE = 0;
+
+    public static final int METADATA = 1;
+
+    public static final int SCRIPT = 2;
+
+    public static final int METADATA_THEN_SCRIPT = 3;
+
+    public static final int SCRIPT_THEN_METADATA = 4;
+}

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/schema/TestSchemaGenerationProperties.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/schema/TestSchemaGenerationProperties.java?rev=1770509&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/schema/TestSchemaGenerationProperties.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/schema/TestSchemaGenerationProperties.java Sat Nov 19 18:08:44 2016
@@ -0,0 +1,339 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.persistence.jdbc.schema;
+
+import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
+import org.apache.openjpa.jdbc.meta.MappingTool;
+import org.apache.openjpa.jdbc.schema.Schema;
+import org.apache.openjpa.jdbc.schema.SchemaGroup;
+import org.apache.openjpa.jdbc.schema.SchemaTool;
+import org.apache.openjpa.jdbc.schema.Table;
+import org.apache.openjpa.persistence.OpenJPAEntityManager;
+import org.apache.openjpa.persistence.OpenJPAEntityManagerFactory;
+import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
+import org.apache.openjpa.persistence.jdbc.common.apps.InvertA;
+import org.apache.openjpa.persistence.jdbc.kernel.BaseJDBCTest;
+
+import java.io.File;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.apache.openjpa.jdbc.identifier.DBIdentifier.newSchema;
+import static org.apache.openjpa.jdbc.identifier.DBIdentifier.newTable;
+import static org.apache.openjpa.jdbc.identifier.QualifiedDBIdentifier.getPath;
+
+/**
+ * @author Roberto Cortez
+ */
+public class TestSchemaGenerationProperties extends BaseJDBCTest {
+    private static final String[] TABLES_NAME = {
+            "AUTOINCPC1",
+            "AUTOINCPC3",
+            "CONJOINPC4",
+            "CONJOINPC5",
+            "CUSTMAPPC",
+            "DFGTEST",
+            "EAGERPC",
+            "EAGERPCSUB",
+            "HELPERPC",
+            "HELPERPC2",
+            "HELPERPC3",
+            "INVERTA",
+            "INVERTB",
+            "EAGEROUTERJOINPC"
+    };
+
+    public TestSchemaGenerationProperties(String name) {
+        super(name);
+    }
+
+    @Override
+    protected String getPersistenceUnitName() {
+        return "TestConv";
+    }
+
+    @Override
+    protected void addProperties(Map map) {}
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+
+        OpenJPAEntityManagerFactory pmf = getEmf(new HashMap());
+        pmf.createEntityManager();
+        JDBCConfiguration conf = (JDBCConfiguration) ((OpenJPAEntityManagerFactorySPI) pmf).getConfiguration();
+
+        MappingTool tool = new MappingTool(conf, "drop", false);
+        SchemaTool schemaTool = new SchemaTool(conf, "drop");
+        schemaTool.setSchemaGroup(tool.getSchemaGroup());
+        schemaTool.run();
+    }
+
+    // TODO - Add validation when source uses script but no script is provided?.
+
+    public void testSchemaGenMetadataDrop() throws Exception {
+        Map<String, String> properties = new HashMap<String, String>();
+        properties.put("javax.persistence.schema-generation.database.action", "drop");
+
+        SchemaGroup dbSchemaGroup = getSchemaGroup(properties);
+
+        for (String tableName : TABLES_NAME) {
+            assertNull("Table " + tableName + " should not exist in the DB.",
+                       dbSchemaGroup.findTable(getPath(newTable(tableName))));
+        }
+    }
+
+    public void testSchemaGenMetadataCreate() throws Exception {
+        Map<String, String> properties = new HashMap<String, String>();
+        properties.put("javax.persistence.schema-generation.database.action", "create");
+
+        SchemaGroup dbSchemaGroup = getSchemaGroup(properties);
+
+        for (String tableName : TABLES_NAME) {
+            assertNotNull("Table " + tableName + " should have been created in the DB, but does not exists.",
+                          dbSchemaGroup.findTable(getPath(newTable(tableName))));
+        }
+    }
+
+    public void testSchemaGenMetadataDropAndCreate() throws Exception {
+        Map<String, String> properties = new HashMap<String, String>();
+        properties.put("javax.persistence.schema-generation.database.action", "drop-and-create");
+
+        SchemaGroup dbSchemaGroup = getSchemaGroup(properties);
+
+        for (String tableName : TABLES_NAME) {
+            assertNotNull("Table " + tableName + " should have been created in the DB, but does not exists.",
+                          dbSchemaGroup.findTable(getPath(newTable(tableName))));
+        }
+    }
+
+    public void testSchemaGenScriptDrop() throws Exception {
+        testSchemaGenMetadataCreate();
+
+        Map<String, String> properties = new HashMap<String, String>();
+        properties.put("javax.persistence.schema-generation.database.action", "drop");
+        properties.put("javax.persistence.schema-generation.drop-source", "script");
+        properties.put("javax.persistence.schema-generation.drop-script-source",
+                       "org/apache/openjpa/persistence/jdbc/schema/drop.sql");
+
+        SchemaGroup dbSchemaGroup = getSchemaGroup(properties);
+
+        for (String tableName : TABLES_NAME) {
+            assertNull("Table " + tableName + " should not exist in the DB.",
+                       dbSchemaGroup.findTable(getPath(newTable(tableName))));
+        }
+    }
+
+    public void testSchemaGenScriptCreate() throws Exception {
+        testSchemaGenMetadataDrop();
+
+        Map<String, String> properties = new HashMap<String, String>();
+        properties.put("javax.persistence.schema-generation.database.action", "create");
+        properties.put("javax.persistence.schema-generation.create-source", "script");
+        properties.put("javax.persistence.schema-generation.create-script-source",
+                       "org/apache/openjpa/persistence/jdbc/schema/create.sql");
+
+        SchemaGroup dbSchemaGroup = getSchemaGroup(properties);
+
+        for (String tableName : TABLES_NAME) {
+            assertNotNull("Table " + tableName + " should have been created in the DB, but does not exists.",
+                          dbSchemaGroup.findTable(getPath(newTable(tableName))));
+        }
+    }
+
+    public void testSchemaGenScriptDropAndCreate() throws Exception {
+        testSchemaGenMetadataCreate();
+
+        Map<String, String> properties = new HashMap<String, String>();
+        properties.put("javax.persistence.schema-generation.database.action", "drop-and-create");
+        properties.put("javax.persistence.schema-generation.drop-source", "script");
+        properties.put("javax.persistence.schema-generation.drop-script-source",
+                       "org/apache/openjpa/persistence/jdbc/schema/drop.sql");
+        properties.put("javax.persistence.schema-generation.create-source", "script");
+        properties.put("javax.persistence.schema-generation.create-script-source",
+                       "org/apache/openjpa/persistence/jdbc/schema/create.sql");
+
+        SchemaGroup dbSchemaGroup = getSchemaGroup(properties);
+
+        for (String tableName : TABLES_NAME) {
+            assertNotNull("Table " + tableName + " should have been created in the DB, but does not exists.",
+                          dbSchemaGroup.findTable(getPath(newTable(tableName))));
+        }
+    }
+
+    public void testSchemaGenMetadataThenScriptDropAndCreate() throws Exception {
+        try {
+            OpenJPAEntityManagerFactory pmf = getEmf();
+            pmf.createEntityManager();
+            JDBCConfiguration conf = (JDBCConfiguration) ((OpenJPAEntityManagerFactorySPI) pmf).getConfiguration();
+
+            SchemaTool schemaTool = new SchemaTool(conf, SchemaTool.ACTION_EXECUTE_SCRIPT);
+            schemaTool.setScriptToExecute("org/apache/openjpa/persistence/jdbc/schema/create-after-metadata.sql");
+            schemaTool.run();
+        } catch (SQLException e) {}
+
+        Map<String, String> properties = new HashMap<String, String>();
+        properties.put("javax.persistence.schema-generation.database.action", "drop-and-create");
+        properties.put("javax.persistence.schema-generation.drop-source", "metadata-then-script");
+        properties.put("javax.persistence.schema-generation.drop-script-source",
+                       "org/apache/openjpa/persistence/jdbc/schema/drop-after-metadata.sql");
+        properties.put("javax.persistence.schema-generation.create-source", "metadata-then-script");
+        properties.put("javax.persistence.schema-generation.create-script-source",
+                       "org/apache/openjpa/persistence/jdbc/schema/create-after-metadata.sql");
+
+        SchemaGroup dbSchemaGroup = getSchemaGroup(properties);
+
+        for (String tableName : TABLES_NAME) {
+            assertNotNull("Table " + tableName + " should have been created in the DB, but does not exists.",
+                          dbSchemaGroup.findTable(getPath(newTable(tableName))));
+        }
+
+        assertNotNull("Table " + "CREATE_AFTER_METADATA" + " should have been created in the DB, but does not exists.",
+                      dbSchemaGroup.findTable(getPath(newTable("CREATE_AFTER_METADATA"))));
+    }
+
+    public void testSchemaGenNoCreateSourceSpecifiedAndCreateScriptSourceSpecified() throws Exception {
+        try {
+            OpenJPAEntityManagerFactory pmf = getEmf();
+            pmf.createEntityManager();
+            JDBCConfiguration conf = (JDBCConfiguration) ((OpenJPAEntityManagerFactorySPI) pmf).getConfiguration();
+
+            SchemaTool schemaTool = new SchemaTool(conf, SchemaTool.ACTION_EXECUTE_SCRIPT);
+            schemaTool.setScriptToExecute("org/apache/openjpa/persistence/jdbc/schema/drop-after-metadata.sql");
+            schemaTool.run();
+        } catch (SQLException e) {}
+
+        Map<String, String> properties = new HashMap<String, String>();
+        properties.put("javax.persistence.schema-generation.database.action", "create");
+        properties.put("javax.persistence.schema-generation.create-script-source",
+                       "org/apache/openjpa/persistence/jdbc/schema/create-after-metadata.sql");
+
+        SchemaGroup dbSchemaGroup = getSchemaGroup(properties);
+
+        assertNotNull("Table " + "CREATE_AFTER_METADATA" + " should have been created in the DB, but does not exists.",
+                      dbSchemaGroup.findTable(getPath(newTable("CREATE_AFTER_METADATA"))));
+    }
+
+    public void testSchemaGenNoCreateSourceAndCreateScriptSourceSpecified() throws Exception {
+        Map<String, String> properties = new HashMap<String, String>();
+        properties.put("javax.persistence.schema-generation.database.action", "create");
+
+        SchemaGroup dbSchemaGroup = getSchemaGroup(properties);
+
+        for (String tableName : TABLES_NAME) {
+            assertNotNull("Table " + tableName + " should have been created in the DB, but does not exists.",
+                          dbSchemaGroup.findTable(getPath(newTable(tableName))));
+        }
+    }
+
+    public void testSchemaGenNoDropSourceSpecifiedAndDropScriptSourceSpecified() throws Exception {
+        testSchemaGenMetadataCreate();
+
+        Map<String, String> properties = new HashMap<String, String>();
+        properties.put("javax.persistence.schema-generation.database.action", "drop");;
+        properties.put("javax.persistence.schema-generation.drop-script-source",
+                       "org/apache/openjpa/persistence/jdbc/schema/drop.sql");
+
+        SchemaGroup dbSchemaGroup = getSchemaGroup(properties);
+
+        for (String tableName : TABLES_NAME) {
+            assertNull("Table " + tableName + " should not exist in the DB.",
+                       dbSchemaGroup.findTable(getPath(newTable(tableName))));
+        }
+    }
+
+    public void testSchemaGenScriptLoad() throws Exception {
+        testSchemaGenMetadataDropAndCreate();
+
+        Map<String, String> properties = new HashMap<String, String>();
+        properties.put("javax.persistence.sql-load-script-source",
+                       "org/apache/openjpa/persistence/jdbc/schema/load.sql");
+
+        OpenJPAEntityManagerFactory pmf = getEmf(properties);
+        OpenJPAEntityManager entityManager = pmf.createEntityManager();
+        JDBCConfiguration conf = (JDBCConfiguration) ((OpenJPAEntityManagerFactorySPI) pmf).getConfiguration();
+
+        SchemaTool schemaTool = new SchemaTool(conf);
+        SchemaGroup dbSchemaGroup = schemaTool.getDBSchemaGroup();
+
+        for (String tableName : TABLES_NAME) {
+            assertNotNull("Table " + tableName + " should have been created in the DB, but does not exists.",
+                          dbSchemaGroup.findTable(getPath(newTable(tableName))));
+        }
+
+        InvertA invertA = entityManager.find(InvertA.class, 1);
+        assertEquals(1, invertA.getId());
+        assertEquals("script load test", invertA.getTest());
+    }
+
+    public void testSchemaGenOutputScriptCreate() throws Exception {
+        Map<String, String> properties = new HashMap<String, String>();
+        properties.put("javax.persistence.schema-generation.database.action", "create");
+        properties.put("javax.persistence.schema-generation.scripts.create-target",
+                       "target/create-db-output.sql");
+
+        getEmf(properties).createEntityManager();
+
+        File createFile = new File("target/create-db-output.sql");
+        assertTrue(createFile.exists());
+        assertTrue(createFile.length() > 0);
+    }
+
+    public void testSchemaGenOutputScriptDrop() throws Exception {
+        Map<String, String> properties = new HashMap<String, String>();
+        properties.put("javax.persistence.schema-generation.database.action", "drop");
+        properties.put("javax.persistence.schema-generation.scripts.drop-target",
+                       "target/drop-db-output.sql");
+
+        getEmf(properties).createEntityManager();
+
+        File dropFile = new File("target/drop-db-output.sql");
+        assertTrue(dropFile.exists());
+        assertTrue(dropFile.length() > 0);
+    }
+
+    public void testSchemaGenOutputScriptDropAndCreate() throws Exception {
+        Map<String, String> properties = new HashMap<String, String>();
+        properties.put("javax.persistence.schema-generation.database.action", "drop-and-create");
+        properties.put("javax.persistence.schema-generation.scripts.create-target",
+                       "target/create-db-output.sql");
+        properties.put("javax.persistence.schema-generation.scripts.drop-target",
+                       "target/drop-db-output.sql");
+
+        getEmf(properties).createEntityManager();
+
+        File createFile = new File("target/create-db-output.sql");
+        assertTrue(createFile.exists());
+        assertTrue(createFile.length() > 0);
+
+        File dropFile = new File("target/drop-db-output.sql");
+        assertTrue(dropFile.exists());
+        assertTrue(dropFile.length() > 0);
+    }
+
+    private SchemaGroup getSchemaGroup(Map<String, String> properties) {
+        OpenJPAEntityManagerFactory pmf = getEmf(properties);
+        pmf.createEntityManager();
+        JDBCConfiguration conf = (JDBCConfiguration) ((OpenJPAEntityManagerFactorySPI) pmf).getConfiguration();
+
+        SchemaTool schemaTool = new SchemaTool(conf);
+        return schemaTool.getDBSchemaGroup();
+    }
+}

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/create-after-metadata.sql
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/create-after-metadata.sql?rev=1770509&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/create-after-metadata.sql (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/create-after-metadata.sql Sat Nov 19 18:08:44 2016
@@ -0,0 +1 @@
+CREATE TABLE CREATE_AFTER_METADATA (ID INTEGER NOT NULL, TEST VARCHAR(35));

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/create.sql
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/create.sql?rev=1770509&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/create.sql (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/create.sql Sat Nov 19 18:08:44 2016
@@ -0,0 +1,14 @@
+CREATE TABLE AUTOINCPC1 (ID INTEGER NOT NULL, STRNGFLD VARCHAR(50), DTYPE VARCHAR(255), ONEONE_ID INTEGER, INTFIELD INTEGER, CONSTRAINT SQL150111133630290 PRIMARY KEY (ID));
+CREATE TABLE AUTOINCPC3 (ID BIGINT NOT NULL, STRNGFLD VARCHAR(50), ONEONE_ID BIGINT, CONSTRAINT SQL150111133630380 PRIMARY KEY (ID));
+CREATE TABLE CONJOINPC4 (ID INTEGER NOT NULL, MANYTOMANY BLOB, NAME VARCHAR(50), ONETOONE1_ID INTEGER, CONSTRAINT SQL150111133630400 PRIMARY KEY (ID));
+CREATE TABLE CONJOINPC5 (ID INTEGER NOT NULL, NAME VARCHAR(255), CONSTRAINT SQL150111133630420 PRIMARY KEY (ID));
+CREATE TABLE CUSTMAPPC (ID INTEGER NOT NULL, FEMALE SMALLINT, NAME VARCHAR(50), CONSTRAINT SQL150111133630430 PRIMARY KEY (ID));
+CREATE TABLE DFGTEST (ID BIGINT NOT NULL, DFGFIELD INTEGER, NONDFGFIELD INTEGER, CONSTRAINT SQL150111133630450 PRIMARY KEY (ID));
+CREATE TABLE EAGEROUTERJOINPC (ID BIGINT NOT NULL, NAME VARCHAR(255), HELPER BLOB, CONSTRAINT SQL150111133630460 PRIMARY KEY (ID));
+CREATE TABLE EAGERPC (ID INTEGER NOT NULL, STRNGFLD VARCHAR(50), EAGER_ID INTEGER, EAGSUB INTEGER, HELPER_ID INTEGER, RECURSE_ID INTEGER, CONSTRAINT SQL150111133630470 PRIMARY KEY (ID));
+CREATE TABLE EAGERPCSUB (ID INTEGER NOT NULL, INTFIELD INTEGER, CONSTRAINT SQL150111133630480 PRIMARY KEY (ID));
+CREATE TABLE HELPERPC (ID INTEGER NOT NULL, STRNGFLD VARCHAR(50), EAGER_ID INTEGER, HELPER BLOB, CONSTRAINT SQL150111133630500 PRIMARY KEY (ID));
+CREATE TABLE HELPERPC2 (ID INTEGER NOT NULL, STRNGFLD VARCHAR(50), HELPER_ID INTEGER, CONSTRAINT SQL150111133630510 PRIMARY KEY (ID));
+CREATE TABLE HELPERPC3 (ID INTEGER NOT NULL, STRNGFLD VARCHAR(50), DTYPE VARCHAR(255), INTFIELD INTEGER, CONSTRAINT SQL150111133630520 PRIMARY KEY (ID));
+CREATE TABLE INVERTA (ID INTEGER NOT NULL, TEST VARCHAR(35), INVERTB_ID INTEGER, CONSTRAINT SQL150111133630530 PRIMARY KEY (ID));
+CREATE TABLE INVERTB (ID INTEGER NOT NULL, TEST VARCHAR(35), INVERTA_ID INTEGER, CONSTRAINT SQL150111133630540 PRIMARY KEY (ID));

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/drop-after-metadata.sql
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/drop-after-metadata.sql?rev=1770509&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/drop-after-metadata.sql (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/drop-after-metadata.sql Sat Nov 19 18:08:44 2016
@@ -0,0 +1 @@
+DROP TABLE CREATE_AFTER_METADATA;

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/drop.sql
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/drop.sql?rev=1770509&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/drop.sql (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/drop.sql Sat Nov 19 18:08:44 2016
@@ -0,0 +1,14 @@
+DROP TABLE AUTOINCPC1;
+DROP TABLE AUTOINCPC3;
+DROP TABLE CONJOINPC4;
+DROP TABLE CONJOINPC5;
+DROP TABLE CUSTMAPPC;
+DROP TABLE DFGTEST;
+DROP TABLE EAGEROUTERJOINPC;
+DROP TABLE EAGERPC;
+DROP TABLE EAGERPCSUB;
+DROP TABLE HELPERPC;
+DROP TABLE HELPERPC2;
+DROP TABLE HELPERPC3;
+DROP TABLE INVERTA;
+DROP TABLE INVERTB;

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/load.sql
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/load.sql?rev=1770509&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/load.sql (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/jdbc/schema/load.sql Sat Nov 19 18:08:44 2016
@@ -0,0 +1 @@
+INSERT INTO INVERTA (ID, TEST) VALUES (1, 'script load test');