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 2015/03/13 13:45:19 UTC

svn commit: r1666426 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb: RDBBlobStore.java RDBDocumentStore.java RDBHelper.java

Author: reschke
Date: Fri Mar 13 12:45:18 2015
New Revision: 1666426

URL: http://svn.apache.org/r1666426
Log:
OAK-2628 - RDB: convenience tool for dumping table creation statements

Added:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBHelper.java   (with props)
Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java?rev=1666426&r1=1666425&r2=1666426&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java Fri Mar 13 12:45:18 2015
@@ -32,11 +32,14 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
 
+import javax.annotation.Nonnull;
 import javax.sql.DataSource;
 
 import org.apache.jackrabbit.oak.commons.StringUtils;
 import org.apache.jackrabbit.oak.plugins.blob.CachingBlobStore;
 import org.apache.jackrabbit.oak.plugins.document.DocumentStoreException;
+import org.apache.jackrabbit.oak.plugins.document.rdb.RDBDocumentStore.DB;
+import org.apache.jackrabbit.oak.plugins.document.rdb.RDBDocumentStore.FETCHFIRSTSYNTAX;
 import org.apache.jackrabbit.oak.spi.blob.AbstractBlobStore;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -130,6 +133,83 @@ public class RDBBlobStore extends Cachin
     private String metaTable;
     private Set<String> tablesToBeDropped = new HashSet<String>();
 
+    /**
+     * Defines variation in the capabilities of different RDBs.
+     */
+    protected enum DB {
+        DB2("DB2") {
+            @Override
+            public String getDataTableCreationStatement(String tableName) {
+                return "create table " + tableName + " (ID varchar(" + IDSIZE + ") not null primary key, DATA blob(" + MINBLOB + "))";
+            }
+        },
+
+        MSSQL("Microsoft SQL Server") {
+            @Override
+            public String getDataTableCreationStatement(String tableName) {
+                return "create table " + tableName + " (ID varchar(" + IDSIZE + ") not null primary key, DATA varbinary(max))";
+            }
+        },
+
+        MYSQL("MySQL") {
+            @Override
+            public String getDataTableCreationStatement(String tableName) {
+                return "create table " + tableName + " (ID varchar(" + IDSIZE + ") not null primary key, DATA mediumblob)";
+            }
+        },
+
+        ORACLE("Oracle") {
+            @Override
+            public String getMetaTableCreationStatement(String tableName) {
+                return "create table " + tableName + " (ID varchar(" + IDSIZE + ") not null primary key, LVL number, LASTMOD number)";
+            }
+        },
+
+        POSTGRES("PostgreSQL") {
+            @Override
+            public String getDataTableCreationStatement(String tableName) {
+                return "create table " + tableName + " (ID varchar(" + IDSIZE + ") not null primary key, DATA bytea)";
+            }
+        },
+
+        DEFAULT("default") {
+        };
+
+        public String getDataTableCreationStatement(String tableName) {
+            return "create table " + tableName + " (ID varchar(" + IDSIZE + ") not null primary key, DATA blob)";
+        }
+
+        public String getMetaTableCreationStatement(String tableName) {
+            return "create table " + tableName + " (ID varchar(" + IDSIZE + ") not null primary key, LVL int, LASTMOD bigint)";
+        }
+
+        private String description;
+
+        private DB(String description) {
+            this.description = description;
+        }
+
+        @Override
+        public String toString() {
+            return this.description;
+        }
+
+        @Nonnull
+        public static DB getValue(String desc) {
+            for (DB db : DB.values()) {
+                if (db.description.equals(desc)) {
+                    return db;
+                } else if (db == DB2 && desc.startsWith("DB2/")) {
+                    return db;
+                }
+            }
+
+            LOG.error("DB type " + desc + " unknown, trying default settings");
+            DEFAULT.description = desc + " - using default settings";
+            return DEFAULT;
+        }
+    }
+
     private void initialize(DataSource ds, RDBOptions options) throws Exception {
 
         String tablePrefix = options.getTablePrefix();
@@ -154,37 +234,16 @@ public class RDBBlobStore extends Cachin
                     // table does not appear to exist
                     con.rollback();
 
-                    String dbtype = con.getMetaData().getDatabaseProductName();
-                    LOG.info("Attempting to create table " + tableName + " in " + dbtype);
+                    DB db = DB.getValue(con.getMetaData().getDatabaseProductName());
+                    LOG.info("Attempting to create table " + tableName + " in " + db);
 
                     Statement stmt = con.createStatement();
 
                     if (baseName.equals("DATASTORE_META")) {
-                        String ct;
-                        if ("Oracle".equals(dbtype)) {
-                            ct = "create table " + tableName + " (ID varchar(" + IDSIZE
-                                    + ") not null primary key, LVL number, LASTMOD number)";
-                        } else {
-                            ct = "create table " + tableName + " (ID varchar(" + IDSIZE
-                                    + ") not null primary key, LVL int, LASTMOD bigint)";
-                        }
+                        String ct = db.getMetaTableCreationStatement(tableName);
                         stmt.execute(ct);
                     } else {
-                        String ct;
-                        if ("PostgreSQL".equals(dbtype)) {
-                            ct = "create table " + tableName + " (ID varchar(" + IDSIZE + ") not null primary key, DATA bytea)";
-                        } else if ("DB2".equals(dbtype) || (dbtype != null && dbtype.startsWith("DB2/"))) {
-                            ct = "create table " + tableName + " (ID varchar(" + IDSIZE + ") not null primary key, DATA blob("
-                                    + MINBLOB + "))";
-                        } else if ("MySQL".equals(dbtype)) {
-                            ct = "create table " + tableName + " (ID varchar(" + IDSIZE
-                                    + ") not null primary key, DATA mediumblob)";
-                        } else if ("Microsoft SQL Server".equals(dbtype)) {
-                            ct = "create table " + tableName + " (ID varchar(" + IDSIZE
-                                    + ") not null primary key, DATA varbinary(max))";
-                        } else {
-                            ct = "create table " + tableName + " (ID varchar(" + IDSIZE + ") not null primary key, DATA blob)";
-                        }
+                        String ct = db.getDataTableCreationStatement(tableName);
                         stmt.execute(ct);
                     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java?rev=1666426&r1=1666425&r2=1666426&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java Fri Mar 13 12:45:18 2015
@@ -366,7 +366,7 @@ public class RDBDocumentStore implements
     /**
      * Defines variation in the capabilities of different RDBs.
      */
-    enum DB {
+    protected enum DB {
         DEFAULT("default") {
         },
 

Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBHelper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBHelper.java?rev=1666426&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBHelper.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBHelper.java Fri Mar 13 12:45:18 2015
@@ -0,0 +1,43 @@
+/*
+ * 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.plugins.document.rdb;
+
+/**
+ * Convenience class that dumps the table creation statements for various database types.
+ */
+public class RDBHelper {
+
+    private static String[] databases = { "DB2", "Microsoft SQL Server", "MySQL", "Oracle", "PostgreSQL" };
+
+    public static void main(String[] args) {
+        for (String database : databases) {
+            System.out.println(database);
+            System.out.println();
+
+            RDBDocumentStore.DB ddb = RDBDocumentStore.DB.getValue(database);
+            RDBBlobStore.DB bdb = RDBBlobStore.DB.getValue(database);
+
+            System.out.println("  " + ddb.getTableCreationStatement("CLUSTERNODES"));
+            System.out.println("  " + ddb.getTableCreationStatement("NODES"));
+            System.out.println("  " + ddb.getTableCreationStatement("SETTINGS"));
+            System.out.println("  " + bdb.getMetaTableCreationStatement("DATASTORE_META"));
+            System.out.println("  " + bdb.getDataTableCreationStatement("DATASTORE_DATA"));
+            System.out.println();
+            System.out.println();
+        }
+    }
+}

Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native