[exo-jcr-commits] exo-jcr SVN: r1606 - jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/cas.

do-not-reply at jboss.org do-not-reply at jboss.org
Thu Jan 28 08:37:43 EST 2010


Author: sergiykarpenko
Date: 2010-01-28 08:37:43 -0500 (Thu, 28 Jan 2010)
New Revision: 1606

Modified:
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/cas/JDBCValueContentAddressStorageImpl.java
Log:
EXOJCR-448: isRecordAlreadyExistsException fixed for DB2

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/cas/JDBCValueContentAddressStorageImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/cas/JDBCValueContentAddressStorageImpl.java	2010-01-28 12:14:13 UTC (rev 1605)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/cas/JDBCValueContentAddressStorageImpl.java	2010-01-28 13:37:43 UTC (rev 1606)
@@ -88,9 +88,21 @@
    /**
     * MYSQL_PK_CONSTRAINT_DETECT.
     */
-   private static final Pattern MYSQL_PK_CONSTRAINT_DETECT = Pattern.compile(MYSQL_PK_CONSTRAINT_DETECT_PATTERN,
-      Pattern.CASE_INSENSITIVE);
+   private static final Pattern MYSQL_PK_CONSTRAINT_DETECT =
+      Pattern.compile(MYSQL_PK_CONSTRAINT_DETECT_PATTERN, Pattern.CASE_INSENSITIVE);
 
+   /**
+    * DB2_PK_CONSTRAINT_DETECT_PATTERN.
+    * %tableName% must be replaced with original table name before compile Pattern.
+    */
+   private static final String DB2_PK_CONSTRAINT_DETECT_PATTERN =
+      "(.*DB2 SQL error+.*SQLCODE: -803+.*SQLSTATE: 23505+.*%tableName%.*)+?";
+
+   /**
+    * DB2_PK_CONSTRAINT_DETECT.
+    */
+   private Pattern DB2_PK_CONSTRAINT_DETECT;
+
    protected DataSource dataSource;
 
    protected String tableName;
@@ -135,7 +147,7 @@
             conn = dataSource.getConnection();
             DatabaseMetaData dbMetaData = conn.getMetaData();
 
-            String dialect = props.getProperty(JDBC_DIALECT_PARAM);
+            dialect = props.getProperty(JDBC_DIALECT_PARAM);
             if (dialect == null)
             {
                dialect = DialectDetecter.detect(dbMetaData);
@@ -152,6 +164,11 @@
                tableName = DEFAULT_TABLE_NAME;
             }
 
+            // make error pattern for DB2
+            String pattern = DB2_PK_CONSTRAINT_DETECT_PATTERN.replaceAll("%tableName%", tableName);
+
+            DB2_PK_CONSTRAINT_DETECT = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);
+
             sqlConstraintPK = tableName + "_PK";
 
             sqlVCASIDX = tableName + "_IDX";
@@ -300,6 +317,16 @@
          return true;
       }
 
+      // check DB2 dialect
+
+      if (DBConstants.DB_DIALECT_DB2.equalsIgnoreCase(dialect))
+      {
+         if (DB2_PK_CONSTRAINT_DETECT.matcher(err).find())
+         {
+            return true;
+         }
+      }
+
       // NOTICE! As an additional check we may ask the database for property currently processed in
       // VCAS
       // and tell true if the property already exists only.



More information about the exo-jcr-commits mailing list