You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by re...@apache.org on 2019/02/12 13:38:53 UTC

svn commit: r1853433 - in /jackrabbit/oak/trunk: oak-run/src/main/java/org/apache/jackrabbit/oak/run/ oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/

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();
     }
 }