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