Author: reschke
Date: Tue Feb 12 13:38:53 2019
New Revision: 1853433

URL: http://svn.apache.org/viewvc?rev=1853433&view=rev
Log:
OAK-8043: RDB: expose DDL generation functionality in oak-run

Added:
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RDBDDLDumpCommand.java
   (with props)
Modified:
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java
    
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBHelper.java

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java?rev=1853433&r1=1853432&r2=1853433&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/AvailableModes.java
 Tue Feb 12 13:38:53 2019
@@ -44,6 +44,7 @@ public final class AvailableModes {
             .put("history", new HistoryCommand())
             .put(JsonIndexCommand.INDEX, new JsonIndexCommand())
             .put(PersistentCacheCommand.PERSISTENTCACHE, new 
PersistentCacheCommand())
+            .put("rdbddldump", new RDBDDLDumpCommand())
             .put("revisions", new RevisionsCommand())
             .put("recovery", new RecoveryCommand())
             .put("repair", new RepairCommand())

Added: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RDBDDLDumpCommand.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RDBDDLDumpCommand.java?rev=1853433&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RDBDDLDumpCommand.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RDBDDLDumpCommand.java
 Tue Feb 12 13:38:53 2019
@@ -0,0 +1,64 @@
+/*
+ * 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.jackrabbit.oak.run;
+
+import java.util.Arrays;
+
+import org.apache.jackrabbit.oak.plugins.document.rdb.RDBHelper;
+import org.apache.jackrabbit.oak.run.commons.Command;
+
+import joptsimple.OptionParser;
+import joptsimple.OptionSet;
+import joptsimple.OptionSpec;
+
+public class RDBDDLDumpCommand implements Command {
+
+    @Override
+    public void execute(String... args) throws Exception {
+        OptionParser parser = new OptionParser();
+        OptionSpec<Void> helpOption = parser.accepts("help", "show 
help").forHelp();
+        OptionSpec<String> dbOption = parser.accepts("db", "Database type: one 
of " + RDBHelper.getSupportedDatabases())
+                .withRequiredArg().ofType(String.class);
+        OptionSpec<Integer> initialSchemaOption = parser.accepts("initial", 
"Initial DB schema version").withRequiredArg()
+                .ofType(Integer.class);
+        OptionSpec<Integer> upgradeSchemaOption = parser.accepts("upgrade", 
"DB schema version to upgrade to").withRequiredArg()
+                .ofType(Integer.class);
+
+        try {
+            OptionSet options = parser.parse(args);
+
+            if (options.has(helpOption)) {
+                System.err.println("Options:");
+                parser.printHelpOn(System.err);
+            } else {
+                String db = dbOption.value(options);
+                Integer initial = initialSchemaOption.value(options);
+                Integer upgrade = upgradeSchemaOption.value(options);
+                RDBHelper.dump(db, initial, upgrade);
+            }
+            System.exit(0);
+        } catch (joptsimple.OptionException ex) {
+            System.err.println(ex.getLocalizedMessage());
+            System.err.println(Arrays.toString(args));
+            System.err.println();
+            System.err.println("Options:");
+            parser.printHelpOn(System.err);
+            System.exit(2);
+        }
+    }
+}

Propchange: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RDBDDLDumpCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBHelper.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBHelper.java?rev=1853433&r1=1853432&r2=1853433&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBHelper.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBHelper.java
 Tue Feb 12 13:38:53 2019
@@ -16,18 +16,21 @@
  */
 package org.apache.jackrabbit.oak.plugins.document.rdb;
 
+import java.util.Arrays;
+
 /**
  * Convenience class that dumps the table creation statements for various
  * database types.
  * <p>
  * Run with:
+ * 
  * <pre>
  * java -cp oak-run-<i>version</i>.jar 
org.apache.jackrabbit.oak.plugins.document.rdb.RDBHelper
  * </pre>
  */
 public class RDBHelper {
 
-    private static String[] databases = { "Apache Derby", "DB2", "H2", 
"Microsoft SQL Server", "MySQL", "Oracle", "PostgreSQL",
+    private static String[] DATABASES = { "Apache Derby", "DB2", "H2", 
"Microsoft SQL Server", "MySQL", "Oracle", "PostgreSQL",
             "default" };
 
     public static void main(String[] args) {
@@ -37,36 +40,64 @@ public class RDBHelper {
         int upgradeTo = defaultOpts.getUpgradeToSchema();
         System.out.println("Table Creation Statements for RDBBlobStore and 
RDBDocumentStore");
         System.out.println("RDBDocumentStore initial version: " + initial + ", 
with modifications up to version: " + upgradeTo);
-        System.out.println("(use system properties 
org.apache.jackrabbit.oak.plugins.document.rdb.RDBOptions.INITIALSCHEMA and 
org.apache.jackrabbit.oak.plugins.document.rdb.RDBOptions.UPGRADETOSCHEMA to 
specify initial DB schema, and schema to upgrade to)");
+        System.out.println(
+                "(use system properties 
org.apache.jackrabbit.oak.plugins.document.rdb.RDBOptions.INITIALSCHEMA and 
org.apache.jackrabbit.oak.plugins.document.rdb.RDBOptions.UPGRADETOSCHEMA to 
specify initial DB schema, and schema to upgrade to)");
         System.out.println();
 
-        for (String database : databases) {
-            System.out.println("-- " + database);
+        for (String database : DATABASES) {
+            internalDump(database, initial, upgradeTo);
+        }
+    }
 
-            RDBDocumentStoreDB ddb = RDBDocumentStoreDB.getValue(database);
-            RDBBlobStoreDB bdb = RDBBlobStoreDB.getValue(database);
+    public static String getSupportedDatabases() {
+        return Arrays.asList(DATABASES).toString();
+    }
 
-            for (String table : RDBDocumentStore.getTableNames()) {
-                System.out.println();
-                System.out.println("  -- creating table " + table + " for 
schema version " + defaultOpts.getInitialSchema());
-                System.out.println("  " + ddb.getTableCreationStatement(table, 
defaultOpts.getInitialSchema()));
-                for (String s : ddb.getIndexCreationStatements(table, 
defaultOpts.getInitialSchema())) {
-                    System.out.println("  " + s);
-                }
-                for (int level = initial + 1; level <= upgradeTo; level++) {
-                    System.out.println("  -- upgrading table " + table + " to 
schema version " + level);
-                    for (String statement : 
ddb.getTableUpgradeStatements(table, level)) {
-                        System.out.println("  " + statement);
-                    }
-                }
-            }
-            System.out.println();
+    public static void dump(String database, Integer initial, Integer upgrade) 
{
+        RDBOptions defaultOpts = new RDBOptions();
+
+        if (database == null) {
+            internalDump(initial == null ? defaultOpts.getInitialSchema() : 
initial,
+                    upgrade == null ? defaultOpts.getUpgradeToSchema() : 
upgrade);
+        } else {
+            internalDump(database, initial == null ? 
defaultOpts.getInitialSchema() : initial,
+                    upgrade == null ? defaultOpts.getUpgradeToSchema() : 
upgrade);
+        }
+    }
 
-            System.out.println("   -- creating blob store tables");
-            System.out.println("  " + 
bdb.getMetaTableCreationStatement("DATASTORE_META"));
-            System.out.println("  " + 
bdb.getDataTableCreationStatement("DATASTORE_DATA"));
+    private static void internalDump(int initial, int upgradeTo) {
+        for (String database : DATABASES) {
+            internalDump(database, initial, upgradeTo);
             System.out.println();
+        }
+    }
+
+    private static void internalDump(String database, int initial, int 
upgradeTo) {
+        System.out.println("-- " + database);
+
+        RDBDocumentStoreDB ddb = RDBDocumentStoreDB.getValue(database);
+        RDBBlobStoreDB bdb = RDBBlobStoreDB.getValue(database);
+
+        for (String table : RDBDocumentStore.getTableNames()) {
             System.out.println();
+            System.out.println("  -- creating table " + table + " for schema 
version " + initial);
+            System.out.println("  " + ddb.getTableCreationStatement(table, 
initial));
+            for (String s : ddb.getIndexCreationStatements(table, initial)) {
+                System.out.println("  " + s);
+            }
+            for (int level = initial + 1; level <= upgradeTo; level++) {
+                System.out.println("  -- upgrading table " + table + " to 
schema version " + level);
+                for (String statement : ddb.getTableUpgradeStatements(table, 
level)) {
+                    System.out.println("  " + statement);
+                }
+            }
         }
+        System.out.println();
+
+        System.out.println("   -- creating blob store tables");
+        System.out.println("  " + 
bdb.getMetaTableCreationStatement("DATASTORE_META"));
+        System.out.println("  " + 
bdb.getDataTableCreationStatement("DATASTORE_DATA"));
+        System.out.println();
+        System.out.println();
     }
 }


Reply via email to