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.
Show replies by date