Author: nfilotto
Date: 2011-11-02 11:13:21 -0400 (Wed, 02 Nov 2011)
New Revision: 5150
Added:
jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-mjdbc.mysql-myisam-utf8.sql
jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-mjdbc.mysql-myisam.sql
jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-sjdbc.mysql-myisam-utf8.sql
jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-sjdbc.mysql-myisam.sql
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/clean/rdbms/DBCleanService.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/config/JDBCConfigurationPersister.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/infinispan/ISPNCacheableLockManagerImpl.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManagerImpl.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainer.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/CQJDBCWorkspaceDataContainer.java
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/util/jdbc/DBInitializerHelper.java
Log:
EXOJCR-1612: Create a specific dialect to allow to use MyISAM instead of InnoDB
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/clean/rdbms/DBCleanService.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/clean/rdbms/DBCleanService.java 2011-11-02
15:03:01 UTC (rev 5149)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/clean/rdbms/DBCleanService.java 2011-11-02
15:13:21 UTC (rev 5150)
@@ -188,6 +188,8 @@
|| dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_ORACLEOCI)
|| dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL)
|| dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_UTF8)
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_MYISAM)
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_MYISAM_UTF8)
|| dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_SYBASE)
|| dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_HSQLDB))
{
@@ -230,7 +232,9 @@
String constraintName;
if (dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL)
- || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL))
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_UTF8)
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_MYISAM)
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_MYISAM_UTF8))
{
return dropScript;
}
@@ -318,7 +322,9 @@
}
if (dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL)
- || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL))
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_UTF8)
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_MYISAM)
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_MYISAM_UTF8))
{
constraintName = validateConstraintName("JCR_FK_" + multiDb +
"VALUE_PROPERTY", dialect);
constraint =
@@ -401,7 +407,9 @@
protected static String dropCommand(boolean isPrimaryKey, String constraintName,
String dialect)
{
if (dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL)
- || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_UTF8))
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_UTF8)
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_MYISAM)
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_MYISAM_UTF8))
{
return isPrimaryKey == true ? "DROP PRIMARY KEY" : "DROP FOREIGN
KEY " + constraintName;
}
@@ -503,7 +511,9 @@
+ "REF_PROPERTY" + OLD_OBJECT_SUFFIX);
}
else if (dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL)
- || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_UTF8))
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_UTF8)
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_MYISAM)
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_MYISAM_UTF8))
{
renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "VALUE RENAME
TO JCR_" + isMultiDB + "VALUE"
+ OLD_OBJECT_SUFFIX);
@@ -634,7 +644,9 @@
+ " RENAME TO JCR_IDX_" + isMultiDB + "REF_PROPERTY");
}
else if (dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL)
- || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_UTF8))
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_UTF8)
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_MYISAM)
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_MYISAM_UTF8))
{
rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "ITEM"
+ OLD_OBJECT_SUFFIX + " RENAME TO JCR_"
+ isMultiDB + "ITEM");
@@ -760,7 +772,9 @@
// Filter scripts
if (dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL)
- || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_UTF8))
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_UTF8)
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_MYISAM)
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_MYISAM_UTF8))
{
for (int i = 0; i < scripts.size(); i++)
{
@@ -848,7 +862,9 @@
cleanWithHelper = true;
}
else if (dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL)
- || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_UTF8))
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_UTF8)
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_MYISAM)
+ || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_MYISAM_UTF8))
{
cleanWithHelper = true;
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/config/JDBCConfigurationPersister.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/config/JDBCConfigurationPersister.java 2011-11-02
15:03:01 UTC (rev 5149)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/config/JDBCConfigurationPersister.java 2011-11-02
15:13:21 UTC (rev 5150)
@@ -185,7 +185,9 @@
binType = "LONG BYTE";
}
else if (DBConstants.DB_DIALECT_MYSQL.equalsIgnoreCase(dialect)
- || DBConstants.DB_DIALECT_MYSQL_UTF8.equalsIgnoreCase(dialect))
+ || DBConstants.DB_DIALECT_MYSQL_UTF8.equalsIgnoreCase(dialect)
+ || DBConstants.DB_DIALECT_MYSQL_MYISAM.equalsIgnoreCase(dialect)
+ || DBConstants.DB_DIALECT_MYSQL_MYISAM_UTF8.equalsIgnoreCase(dialect))
{
binType = "LONGBLOB";
}
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/infinispan/ISPNCacheableLockManagerImpl.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/infinispan/ISPNCacheableLockManagerImpl.java 2011-11-02
15:03:01 UTC (rev 5149)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/infinispan/ISPNCacheableLockManagerImpl.java 2011-11-02
15:13:21 UTC (rev 5150)
@@ -282,7 +282,8 @@
blobType = "VARBINARY(65535)";
}
// MYSQL
- else if (dialect.equals(DBConstants.DB_DIALECT_MYSQL) ||
dialect.equals(DBConstants.DB_DIALECT_MYSQL_UTF8))
+ else if (dialect.equals(DBConstants.DB_DIALECT_MYSQL) ||
dialect.equals(DBConstants.DB_DIALECT_MYSQL_UTF8) ||
+ dialect.equals(DBConstants.DB_DIALECT_MYSQL_MYISAM) ||
dialect.equals(DBConstants.DB_DIALECT_MYSQL_MYISAM_UTF8))
{
blobType = "LONGBLOB";
}
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManagerImpl.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManagerImpl.java 2011-11-02
15:03:01 UTC (rev 5149)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManagerImpl.java 2011-11-02
15:13:21 UTC (rev 5150)
@@ -384,7 +384,8 @@
blobType = "VARBINARY(65535)";
}
// MYSQL
- else if (dialect.equals(DBConstants.DB_DIALECT_MYSQL) ||
dialect.equals(DBConstants.DB_DIALECT_MYSQL_UTF8))
+ else if (dialect.equals(DBConstants.DB_DIALECT_MYSQL) ||
dialect.equals(DBConstants.DB_DIALECT_MYSQL_UTF8) ||
+ dialect.equals(DBConstants.DB_DIALECT_MYSQL_MYISAM) ||
dialect.equals(DBConstants.DB_DIALECT_MYSQL_MYISAM_UTF8))
{
blobType = "LONGBLOB";
}
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java 2011-11-02
15:03:01 UTC (rev 5149)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java 2011-11-02
15:13:21 UTC (rev 5150)
@@ -133,7 +133,7 @@
* FIND_LAST_ORDER_NUMBER_BY_PARENTID.
*/
protected String FIND_LAST_ORDER_NUMBER_BY_PARENTID;
-
+
/**
* FIND_NODES_COUNT_BY_PARENTID.
*/
@@ -271,6 +271,7 @@
* DB_DIALECT_AUTO.
*/
public final static String DB_DIALECT_AUTO = "Auto".intern();
+
/**
* DB_DIALECT_GENERIC.
*/
@@ -302,10 +303,20 @@
public final static String DB_DIALECT_MYSQL_UTF8 = "MySQL-UTF8".intern();
/**
+ * DB_DIALECT_MYSQL_MYISAM.
+ */
+ public final static String DB_DIALECT_MYSQL_MYISAM =
"MySQL-MyISAM".intern();
+
+ /**
+ * DB_DIALECT_MYSQL_MYISAM_UTF8.
+ */
+ public final static String DB_DIALECT_MYSQL_MYISAM_UTF8 =
"MySQL-MyISAM-UTF8".intern();
+
+ /**
* DB_DIALECT_HSQLDB.
*/
public final static String DB_DIALECT_HSQLDB = "HSQLDB".intern();
-
+
/**
* DB_DIALECT_DB2.
*/
@@ -335,18 +346,18 @@
* DB_DIALECT_INGRES.
*/
public final static String DB_DIALECT_INGRES = "Ingres".intern();
-
+
/**
* DB_DIALECT_H2.
*/
public final static String DB_DIALECT_H2 = "H2".intern();
-
/**
* DB_DIALECTS.
*/
public final static String[] DB_DIALECTS = {DB_DIALECT_GENERIC, DB_DIALECT_ORACLE,
DB_DIALECT_ORACLEOCI,
DB_DIALECT_PGSQL, DB_DIALECT_MYSQL, DB_DIALECT_HSQLDB, DB_DIALECT_DB2,
DB_DIALECT_DB2V8, DB_DIALECT_MSSQL,
- DB_DIALECT_SYBASE, DB_DIALECT_DERBY, DB_DIALECT_MYSQL_UTF8, DB_DIALECT_INGRES,
DB_DIALECT_H2};
+ DB_DIALECT_SYBASE, DB_DIALECT_DERBY, DB_DIALECT_MYSQL_UTF8, DB_DIALECT_INGRES,
DB_DIALECT_H2,
+ DB_DIALECT_MYSQL_MYISAM, DB_DIALECT_MYSQL_MYISAM_UTF8};
}
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainer.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainer.java 2011-11-02
15:03:01 UTC (rev 5149)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainer.java 2011-11-02
15:13:21 UTC (rev 5150)
@@ -630,8 +630,8 @@
protected void initDatabase() throws NamingException, RepositoryException,
IOException
{
- StorageDBInitializer dbInitilizer = null;
- String sqlPath = null;
+ StorageDBInitializer dbInitializer = null;
+ String sqlPath = DBInitializerHelper.scriptPath(dbDialect, multiDb);
if (dbDialect == DBConstants.DB_DIALECT_ORACLEOCI)
{
LOG.warn(DBConstants.DB_DIALECT_ORACLEOCI + " dialect is
experimental!");
@@ -646,46 +646,28 @@
new OracleConnectionFactory(dbDriver, dbUrl, dbUserName, dbPassword,
containerName, multiDb,
valueStorageProvider, maxBufferSize, swapDirectory, swapCleaner);
}
-
- sqlPath = DBInitializerHelper.scriptPath(dbDialect, multiDb);
-
// a particular db initializer may be configured here too
- dbInitilizer = new OracleDBInitializer(containerName,
this.connFactory.getJdbcConnection(), sqlPath, multiDb);
+ dbInitializer = new OracleDBInitializer(containerName,
this.connFactory.getJdbcConnection(), sqlPath, multiDb);
}
else if (dbDialect == DBConstants.DB_DIALECT_ORACLE)
{
this.connFactory = defaultConnectionFactory();
- sqlPath = DBInitializerHelper.scriptPath(dbDialect, multiDb);
- dbInitilizer = new OracleDBInitializer(containerName,
this.connFactory.getJdbcConnection(), sqlPath, multiDb);
+ dbInitializer = new OracleDBInitializer(containerName,
this.connFactory.getJdbcConnection(), sqlPath, multiDb);
}
else if (dbDialect == DBConstants.DB_DIALECT_PGSQL)
{
this.connFactory = defaultConnectionFactory();
- sqlPath = DBInitializerHelper.scriptPath(dbDialect, multiDb);
- dbInitilizer = new PgSQLDBInitializer(containerName,
this.connFactory.getJdbcConnection(), sqlPath, multiDb);
+ dbInitializer = new PgSQLDBInitializer(containerName,
this.connFactory.getJdbcConnection(), sqlPath, multiDb);
}
- else if (dbDialect == DBConstants.DB_DIALECT_MYSQL)
+ else if (dbDialect == DBConstants.DB_DIALECT_MYSQL || dbDialect ==
DBConstants.DB_DIALECT_MYSQL_UTF8 ||
+ dbDialect == DBConstants.DB_DIALECT_MYSQL_MYISAM || dbDialect ==
DBConstants.DB_DIALECT_MYSQL_MYISAM_UTF8)
{
- // [PN] 28.06.07
- if (dbSourceName != null)
+ if (dbDialect == DBConstants.DB_DIALECT_MYSQL_MYISAM || dbDialect ==
DBConstants.DB_DIALECT_MYSQL_MYISAM_UTF8)
{
- this.connFactory =
- new MySQLConnectionFactory(getDataSource(), containerName, multiDb,
valueStorageProvider, maxBufferSize,
- swapDirectory, swapCleaner);
+ LOG.warn("MyISAM is not supported due to its lack of transaction support
and integrity check, so use it only" +
+ " if you don't expect any support and performances in read
accesses are more important than the consistency" +
+ " in your use-case. This dialect is only dedicated to the
community.");
}
- else
- {
- this.connFactory =
- new MySQLConnectionFactory(dbDriver, dbUrl, dbUserName, dbPassword,
containerName, multiDb,
- valueStorageProvider, maxBufferSize, swapDirectory, swapCleaner);
- }
-
- sqlPath = DBInitializerHelper.scriptPath(dbDialect, multiDb);
- dbInitilizer = defaultDBInitializer(sqlPath);
- }
- else if (dbDialect == DBConstants.DB_DIALECT_MYSQL_UTF8)
- {
- // [PN] 13.07.08
if (dbSourceName != null)
{
this.connFactory =
@@ -699,45 +681,38 @@
valueStorageProvider, maxBufferSize, swapDirectory, swapCleaner);
}
- sqlPath = DBInitializerHelper.scriptPath(dbDialect, multiDb);
- dbInitilizer = defaultDBInitializer(sqlPath);
+ dbInitializer = defaultDBInitializer(sqlPath);
}
else if (dbDialect == DBConstants.DB_DIALECT_MSSQL)
{
this.connFactory = defaultConnectionFactory();
- sqlPath = DBInitializerHelper.scriptPath(dbDialect, multiDb);
- dbInitilizer = defaultDBInitializer(sqlPath);
+ dbInitializer = defaultDBInitializer(sqlPath);
}
else if (dbDialect == DBConstants.DB_DIALECT_DERBY)
{
this.connFactory = defaultConnectionFactory();
- sqlPath = DBInitializerHelper.scriptPath(dbDialect, multiDb);
- dbInitilizer = defaultDBInitializer(sqlPath);
+ dbInitializer = defaultDBInitializer(sqlPath);
}
else if (dbDialect == DBConstants.DB_DIALECT_DB2)
{
this.connFactory = defaultConnectionFactory();
- sqlPath = DBInitializerHelper.scriptPath(dbDialect, multiDb);
- dbInitilizer = defaultDBInitializer(sqlPath);
+ dbInitializer = defaultDBInitializer(sqlPath);
}
else if (dbDialect == DBConstants.DB_DIALECT_DB2V8)
{
this.connFactory = defaultConnectionFactory();
- sqlPath = DBInitializerHelper.scriptPath(dbDialect, multiDb);
- dbInitilizer = defaultDBInitializer(sqlPath);
+ dbInitializer = defaultDBInitializer(sqlPath);
}
else if (dbDialect == DBConstants.DB_DIALECT_SYBASE)
{
this.connFactory = defaultConnectionFactory();
- sqlPath = DBInitializerHelper.scriptPath(dbDialect, multiDb);
- dbInitilizer = defaultDBInitializer(sqlPath);
+ dbInitializer = defaultDBInitializer(sqlPath);
}
else if (dbDialect == DBConstants.DB_DIALECT_INGRES)
{
this.connFactory = defaultConnectionFactory();
- sqlPath = DBInitializerHelper.scriptPath(dbDialect, multiDb);
// using Postgres initializer
- dbInitilizer =
+ dbInitializer =
new IngresSQLDBInitializer(containerName,
this.connFactory.getJdbcConnection(), sqlPath, multiDb);
}
else if (dbDialect == DBConstants.DB_DIALECT_HSQLDB)
@@ -754,21 +729,19 @@
new HSQLDBConnectionFactory(dbDriver, dbUrl, dbUserName, dbPassword,
containerName, multiDb,
valueStorageProvider, maxBufferSize, swapDirectory, swapCleaner);
}
- sqlPath = DBInitializerHelper.scriptPath(dbDialect, multiDb);
- dbInitilizer = defaultDBInitializer(sqlPath);
+ dbInitializer = defaultDBInitializer(sqlPath);
}
else
{
// generic, DB_HSQLDB
this.connFactory = defaultConnectionFactory();
- sqlPath = DBInitializerHelper.scriptPath(dbDialect, multiDb);
- dbInitilizer = defaultDBInitializer(sqlPath);
+ dbInitializer = defaultDBInitializer(sqlPath);
}
// database type
try
{
- dbInitilizer.init();
+ dbInitializer.init();
}
catch (DBInitializerException e)
{
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/CQJDBCWorkspaceDataContainer.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/CQJDBCWorkspaceDataContainer.java 2011-11-02
15:03:01 UTC (rev 5149)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/CQJDBCWorkspaceDataContainer.java 2011-11-02
15:13:21 UTC (rev 5150)
@@ -39,6 +39,7 @@
import
org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.db.SybaseConnectionFactory;
import org.exoplatform.services.jcr.impl.util.io.FileCleanerHolder;
import org.exoplatform.services.jcr.impl.util.jdbc.DBInitializerException;
+import org.exoplatform.services.jcr.impl.util.jdbc.DBInitializerHelper;
import org.exoplatform.services.jcr.storage.value.ValueStoragePluginProvider;
import org.exoplatform.services.jdbc.DataSourceProvider;
import org.exoplatform.services.naming.InitialContextInitializer;
@@ -93,8 +94,8 @@
protected void initDatabase() throws NamingException, RepositoryException,
IOException
{
- StorageDBInitializer dbInitilizer = null;
- String sqlPath = null;
+ StorageDBInitializer dbInitializer = null;
+ String sqlPath = DBInitializerHelper.scriptPath(dbDialect, multiDb);
if (dbDialect == DBConstants.DB_DIALECT_ORACLEOCI)
{
LOG.warn(DBConstants.DB_DIALECT_ORACLEOCI + " dialect is
experimental!");
@@ -110,10 +111,8 @@
new OracleConnectionFactory(dbDriver, dbUrl, dbUserName, dbPassword,
containerName, multiDb,
valueStorageProvider, maxBufferSize, swapDirectory, swapCleaner,
useQueryHints);
- sqlPath = "/conf/storage/jcr-" + (multiDb ? "m" :
"s") + "jdbc.ora.sql";
-
// a particular db initializer may be configured here too
- dbInitilizer = new OracleDBInitializer(containerName,
this.connFactory.getJdbcConnection(), sqlPath, multiDb);
+ dbInitializer = new OracleDBInitializer(containerName,
this.connFactory.getJdbcConnection(), sqlPath, multiDb);
}
else if (dbDialect == DBConstants.DB_DIALECT_ORACLE)
{
@@ -128,8 +127,7 @@
this.connFactory =
new DefaultOracleConnectionFactory(dbDriver, dbUrl, dbUserName,
dbPassword, containerName, multiDb,
valueStorageProvider, maxBufferSize, swapDirectory, swapCleaner,
useQueryHints);
- sqlPath = "/conf/storage/jcr-" + (multiDb ? "m" :
"s") + "jdbc.ora.sql";
- dbInitilizer = new OracleDBInitializer(containerName,
this.connFactory.getJdbcConnection(), sqlPath, multiDb);
+ dbInitializer = new OracleDBInitializer(containerName,
this.connFactory.getJdbcConnection(), sqlPath, multiDb);
}
else if (dbDialect == DBConstants.DB_DIALECT_PGSQL)
@@ -145,32 +143,17 @@
new PostgreConnectionFactory(dbDriver, dbUrl, dbUserName, dbPassword,
containerName, multiDb,
valueStorageProvider, maxBufferSize, swapDirectory, swapCleaner);
- sqlPath = "/conf/storage/jcr-" + (multiDb ? "m" :
"s") + "jdbc.mysql.sql";
- dbInitilizer = defaultDBInitializer(sqlPath);
-
- sqlPath = "/conf/storage/jcr-" + (multiDb ? "m" :
"s") + "jdbc.pgsql.sql";
- dbInitilizer = new PgSQLDBInitializer(containerName,
this.connFactory.getJdbcConnection(), sqlPath, multiDb);
+ dbInitializer = new PgSQLDBInitializer(containerName,
this.connFactory.getJdbcConnection(), sqlPath, multiDb);
}
- else if (dbDialect == DBConstants.DB_DIALECT_MYSQL)
+ else if (dbDialect == DBConstants.DB_DIALECT_MYSQL || dbDialect ==
DBConstants.DB_DIALECT_MYSQL_UTF8 ||
+ dbDialect == DBConstants.DB_DIALECT_MYSQL_MYISAM || dbDialect ==
DBConstants.DB_DIALECT_MYSQL_MYISAM_UTF8)
{
- // [PN] 28.06.07
- if (dbSourceName != null)
+ if (dbDialect == DBConstants.DB_DIALECT_MYSQL_MYISAM || dbDialect ==
DBConstants.DB_DIALECT_MYSQL_MYISAM_UTF8)
{
- this.connFactory =
- new MySQLConnectionFactory(getDataSource(), containerName, multiDb,
valueStorageProvider, maxBufferSize,
- swapDirectory, swapCleaner);
+ LOG.warn("MyISAM is not supported due to its lack of transaction support
and integrity check, so use it only" +
+ " if you don't expect any support and performances in read
accesses are more important than the consistency" +
+ " in your use-case. This dialect is only dedicated to the
community.");
}
- else
- this.connFactory =
- new MySQLConnectionFactory(dbDriver, dbUrl, dbUserName, dbPassword,
containerName, multiDb,
- valueStorageProvider, maxBufferSize, swapDirectory, swapCleaner);
-
- sqlPath = "/conf/storage/jcr-" + (multiDb ? "m" :
"s") + "jdbc.mysql.sql";
- dbInitilizer = defaultDBInitializer(sqlPath);
- }
- else if (dbDialect == DBConstants.DB_DIALECT_MYSQL_UTF8)
- {
- // [PN] 13.07.08
if (dbSourceName != null)
{
this.connFactory =
@@ -182,8 +165,7 @@
new MySQLConnectionFactory(dbDriver, dbUrl, dbUserName, dbPassword,
containerName, multiDb,
valueStorageProvider, maxBufferSize, swapDirectory, swapCleaner);
- sqlPath = "/conf/storage/jcr-" + (multiDb ? "m" :
"s") + "jdbc.mysql-utf8.sql";
- dbInitilizer = defaultDBInitializer(sqlPath);
+ dbInitializer = defaultDBInitializer(sqlPath);
}
else if (dbDialect == DBConstants.DB_DIALECT_MSSQL)
{
@@ -200,14 +182,12 @@
valueStorageProvider, maxBufferSize, swapDirectory, swapCleaner);
}
- sqlPath = "/conf/storage/jcr-" + (multiDb ? "m" :
"s") + "jdbc.mssql.sql";
- dbInitilizer = defaultDBInitializer(sqlPath);
+ dbInitializer = defaultDBInitializer(sqlPath);
}
else if (dbDialect == DBConstants.DB_DIALECT_DERBY)
{
this.connFactory = defaultConnectionFactory();
- sqlPath = "/conf/storage/jcr-" + (multiDb ? "m" :
"s") + "jdbc.derby.sql";
- dbInitilizer = defaultDBInitializer(sqlPath);
+ dbInitializer = defaultDBInitializer(sqlPath);
}
else if (dbDialect == DBConstants.DB_DIALECT_DB2)
{
@@ -224,8 +204,7 @@
valueStorageProvider, maxBufferSize, swapDirectory, swapCleaner);
}
- sqlPath = "/conf/storage/jcr-" + (multiDb ? "m" :
"s") + "jdbc.db2.sql";
- dbInitilizer = defaultDBInitializer(sqlPath);
+ dbInitializer = defaultDBInitializer(sqlPath);
}
else if (dbDialect == DBConstants.DB_DIALECT_DB2V8)
{
@@ -242,8 +221,7 @@
valueStorageProvider, maxBufferSize, swapDirectory, swapCleaner);
}
- sqlPath = "/conf/storage/jcr-" + (multiDb ? "m" :
"s") + "jdbc.db2v8.sql";
- dbInitilizer = defaultDBInitializer(sqlPath);
+ dbInitializer = defaultDBInitializer(sqlPath);
}
else if (dbDialect == DBConstants.DB_DIALECT_SYBASE)
{
@@ -260,15 +238,13 @@
valueStorageProvider, maxBufferSize, swapDirectory, swapCleaner);
}
- sqlPath = "/conf/storage/jcr-" + (multiDb ? "m" :
"s") + "jdbc.sybase.sql";
- dbInitilizer = defaultDBInitializer(sqlPath);
+ dbInitializer = defaultDBInitializer(sqlPath);
}
else if (dbDialect == DBConstants.DB_DIALECT_INGRES)
{
this.connFactory = defaultConnectionFactory();
- sqlPath = "/conf/storage/jcr-" + (multiDb ? "m" :
"s") + "jdbc.ingres.sql";
// using Postgres initializer
- dbInitilizer =
+ dbInitializer =
new IngresSQLDBInitializer(containerName,
this.connFactory.getJdbcConnection(), sqlPath, multiDb);
}
else if (dbDialect == DBConstants.DB_DIALECT_HSQLDB)
@@ -283,21 +259,19 @@
this.connFactory =
new HSQLDBConnectionFactory(dbDriver, dbUrl, dbUserName, dbPassword,
containerName, multiDb,
valueStorageProvider, maxBufferSize, swapDirectory, swapCleaner);
- sqlPath = "/conf/storage/jcr-" + (multiDb ? "m" :
"s") + "jdbc.sql";
- dbInitilizer = defaultDBInitializer(sqlPath);
+ dbInitializer = defaultDBInitializer(sqlPath);
}
else
{
// generic, DB_HSQLDB
this.connFactory = defaultConnectionFactory();
- sqlPath = "/conf/storage/jcr-" + (multiDb ? "m" :
"s") + "jdbc.sql";
- dbInitilizer = defaultDBInitializer(sqlPath);
+ dbInitializer = defaultDBInitializer(sqlPath);
}
// database type
try
{
- dbInitilizer.init();
+ dbInitializer.init();
}
catch (DBInitializerException e)
{
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 2011-11-02
15:03:01 UTC (rev 5149)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/cas/JDBCValueContentAddressStorageImpl.java 2011-11-02
15:13:21 UTC (rev 5150)
@@ -346,7 +346,9 @@
//
String err = e.toString();
if (DBConstants.DB_DIALECT_MYSQL.equalsIgnoreCase(dialect)
- || DBConstants.DB_DIALECT_MYSQL_UTF8.equalsIgnoreCase(dialect))
+ || DBConstants.DB_DIALECT_MYSQL_UTF8.equalsIgnoreCase(dialect)
+ || DBConstants.DB_DIALECT_MYSQL_MYISAM.equalsIgnoreCase(dialect)
+ || DBConstants.DB_DIALECT_MYSQL_MYISAM_UTF8.equalsIgnoreCase(dialect))
{
// for MySQL will search
return MYSQL_PK_CONSTRAINT_DETECT.matcher(err).find();
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/jdbc/DBInitializerHelper.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/jdbc/DBInitializerHelper.java 2011-11-02
15:03:01 UTC (rev 5149)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/jdbc/DBInitializerHelper.java 2011-11-02
15:13:21 UTC (rev 5150)
@@ -82,10 +82,18 @@
{
sqlPath = "/conf/storage/jcr-" + (multiDb ? "m" :
"s") + "jdbc.mysql.sql";
}
+ else if (dbDialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_MYISAM))
+ {
+ sqlPath = "/conf/storage/jcr-" + (multiDb ? "m" :
"s") + "jdbc.mysql-myisam.sql";
+ }
else if (dbDialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_UTF8))
{
sqlPath = "/conf/storage/jcr-" + (multiDb ? "m" :
"s") + "jdbc.mysql-utf8.sql";
}
+ else if (dbDialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL_MYISAM_UTF8))
+ {
+ sqlPath = "/conf/storage/jcr-" + (multiDb ? "m" :
"s") + "jdbc.mysql-myisam-utf8.sql";
+ }
else if (dbDialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MSSQL))
{
sqlPath = "/conf/storage/jcr-" + (multiDb ? "m" :
"s") + "jdbc.mssql.sql";
Added:
jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-mjdbc.mysql-myisam-utf8.sql
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-mjdbc.mysql-myisam-utf8.sql
(rev 0)
+++
jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-mjdbc.mysql-myisam-utf8.sql 2011-11-02
15:13:21 UTC (rev 5150)
@@ -0,0 +1,39 @@
+CREATE TABLE JCR_MCONTAINER(
+ VERSION VARCHAR(56) NOT NULL,
+ CONSTRAINT JCR_PK_MCONTAINER PRIMARY KEY(VERSION)
+) ENGINE=MyISAM;
+CREATE TABLE JCR_MITEM(
+ ID VARCHAR(56) NOT NULL,
+ PARENT_ID VARCHAR(56) NOT NULL,
+ NAME VARCHAR(512) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
+ VERSION INTEGER NOT NULL,
+ I_CLASS INTEGER NOT NULL,
+ I_INDEX INTEGER NOT NULL,
+ N_ORDER_NUM INTEGER,
+ P_TYPE INTEGER,
+ P_MULTIVALUED BOOLEAN,
+ CONSTRAINT JCR_PK_MITEM PRIMARY KEY(ID),
+ CONSTRAINT JCR_FK_MITEM_PARENT FOREIGN KEY(PARENT_ID) REFERENCES JCR_MITEM(ID)
+) ENGINE=MyISAM;
+CREATE UNIQUE INDEX JCR_IDX_MITEM_PARENT ON JCR_MITEM(PARENT_ID, NAME(255), I_INDEX,
I_CLASS, VERSION DESC);
+CREATE UNIQUE INDEX JCR_IDX_MITEM_PARENT_NAME ON JCR_MITEM(I_CLASS, PARENT_ID, NAME(255),
I_INDEX, VERSION DESC);
+CREATE UNIQUE INDEX JCR_IDX_MITEM_PARENT_ID ON JCR_MITEM(I_CLASS, PARENT_ID, ID, VERSION
DESC);
+CREATE INDEX JCR_IDX_MITEM_PARENT_N_ORDER_NUM ON JCR_MITEM(I_CLASS, PARENT_ID,
N_ORDER_NUM, ID);
+CREATE TABLE JCR_MVALUE(
+ ID SERIAL NOT NULL,
+ DATA LONGBLOB,
+ ORDER_NUM INTEGER NOT NULL,
+ PROPERTY_ID VARCHAR(56) NOT NULL,
+ STORAGE_DESC VARCHAR(512),
+ CONSTRAINT JCR_PK_MVALUE PRIMARY KEY(ID),
+ CONSTRAINT JCR_FK_MVALUE_PROPERTY FOREIGN KEY(PROPERTY_ID) REFERENCES JCR_MITEM(ID)
+) ENGINE=MyISAM;
+CREATE UNIQUE INDEX JCR_IDX_MVALUE_PROPERTY ON JCR_MVALUE(PROPERTY_ID, ORDER_NUM);
+CREATE INDEX JCR_IDX_MVALUE_STORAGE_DESC ON JCR_MVALUE(PROPERTY_ID, STORAGE_DESC);
+CREATE TABLE JCR_MREF(
+ NODE_ID VARCHAR(56) NOT NULL,
+ PROPERTY_ID VARCHAR(56) NOT NULL,
+ ORDER_NUM INTEGER NOT NULL,
+ CONSTRAINT JCR_PK_MREF PRIMARY KEY(NODE_ID, PROPERTY_ID, ORDER_NUM)
+) ENGINE=MyISAM;
+CREATE UNIQUE INDEX JCR_IDX_MREF_PROPERTY ON JCR_MREF(PROPERTY_ID, ORDER_NUM);
\ No newline at end of file
Added:
jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-mjdbc.mysql-myisam.sql
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-mjdbc.mysql-myisam.sql
(rev 0)
+++
jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-mjdbc.mysql-myisam.sql 2011-11-02
15:13:21 UTC (rev 5150)
@@ -0,0 +1,39 @@
+CREATE TABLE JCR_MCONTAINER(
+ VERSION VARCHAR(96) NOT NULL,
+ CONSTRAINT JCR_PK_MCONTAINER PRIMARY KEY(VERSION)
+) ENGINE=MyISAM;
+CREATE TABLE JCR_MITEM(
+ ID VARCHAR(96) NOT NULL,
+ PARENT_ID VARCHAR(96) NOT NULL,
+ NAME VARCHAR(512) CHARSET latin1 COLLATE latin1_general_cs NOT NULL,
+ VERSION INTEGER NOT NULL,
+ I_CLASS INTEGER NOT NULL,
+ I_INDEX INTEGER NOT NULL,
+ N_ORDER_NUM INTEGER,
+ P_TYPE INTEGER,
+ P_MULTIVALUED BOOLEAN,
+ CONSTRAINT JCR_PK_MITEM PRIMARY KEY(ID),
+ CONSTRAINT JCR_FK_MITEM_PARENT FOREIGN KEY(PARENT_ID) REFERENCES JCR_MITEM(ID)
+) ENGINE=MyISAM;
+CREATE UNIQUE INDEX JCR_IDX_MITEM_PARENT ON JCR_MITEM(PARENT_ID, NAME, I_INDEX, I_CLASS,
VERSION DESC);
+CREATE UNIQUE INDEX JCR_IDX_MITEM_PARENT_NAME ON JCR_MITEM(I_CLASS, PARENT_ID, NAME,
I_INDEX, VERSION DESC);
+CREATE UNIQUE INDEX JCR_IDX_MITEM_PARENT_ID ON JCR_MITEM(I_CLASS, PARENT_ID, ID, VERSION
DESC);
+CREATE INDEX JCR_IDX_MITEM_PARENT_N_ORDER_NUM ON JCR_MITEM(I_CLASS, PARENT_ID,
N_ORDER_NUM, ID);
+CREATE TABLE JCR_MVALUE(
+ ID SERIAL NOT NULL,
+ DATA LONGBLOB,
+ ORDER_NUM INTEGER NOT NULL,
+ PROPERTY_ID VARCHAR(96) NOT NULL,
+ STORAGE_DESC VARCHAR(512),
+ CONSTRAINT JCR_PK_MVALUE PRIMARY KEY(ID),
+ CONSTRAINT JCR_FK_MVALUE_PROPERTY FOREIGN KEY(PROPERTY_ID) REFERENCES JCR_MITEM(ID)
+) ENGINE=MyISAM;
+CREATE UNIQUE INDEX JCR_IDX_MVALUE_PROPERTY ON JCR_MVALUE(PROPERTY_ID, ORDER_NUM);
+CREATE INDEX JCR_IDX_MVALUE_STORAGE_DESC ON JCR_MVALUE(PROPERTY_ID, STORAGE_DESC);
+CREATE TABLE JCR_MREF(
+ NODE_ID VARCHAR(96) NOT NULL,
+ PROPERTY_ID VARCHAR(96) NOT NULL,
+ ORDER_NUM INTEGER NOT NULL,
+ CONSTRAINT JCR_PK_MREF PRIMARY KEY(NODE_ID, PROPERTY_ID, ORDER_NUM)
+) ENGINE=MyISAM;
+CREATE UNIQUE INDEX JCR_IDX_MREF_PROPERTY ON JCR_MREF(PROPERTY_ID, ORDER_NUM);
Added:
jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-sjdbc.mysql-myisam-utf8.sql
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-sjdbc.mysql-myisam-utf8.sql
(rev 0)
+++
jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-sjdbc.mysql-myisam-utf8.sql 2011-11-02
15:13:21 UTC (rev 5150)
@@ -0,0 +1,40 @@
+CREATE TABLE JCR_SCONTAINER(
+ VERSION VARCHAR(56) NOT NULL,
+ CONSTRAINT JCR_PK_SCONTAINER PRIMARY KEY(VERSION)
+) ENGINE=MyISAM;
+CREATE TABLE JCR_SITEM(
+ ID VARCHAR(56) NOT NULL,
+ PARENT_ID VARCHAR(56) NOT NULL,
+ NAME VARCHAR(512) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
+ VERSION INTEGER NOT NULL,
+ CONTAINER_NAME VARCHAR(24) NOT NULL,
+ I_CLASS INTEGER NOT NULL,
+ I_INDEX INTEGER NOT NULL,
+ N_ORDER_NUM INTEGER,
+ P_TYPE INTEGER,
+ P_MULTIVALUED BOOLEAN,
+ CONSTRAINT JCR_PK_SITEM PRIMARY KEY(ID)
+ CONSTRAINT JCR_FK_SITEM_PARENT FOREIGN KEY(PARENT_ID) REFERENCES JCR_SITEM(ID)
+) ENGINE=MyISAM;
+CREATE UNIQUE INDEX JCR_IDX_SITEM_PARENT ON JCR_SITEM(CONTAINER_NAME, PARENT_ID,
NAME(255), I_INDEX, I_CLASS, VERSION DESC);
+CREATE UNIQUE INDEX JCR_IDX_SITEM_PARENT_NAME ON JCR_SITEM(I_CLASS, CONTAINER_NAME,
PARENT_ID, NAME(255), I_INDEX, VERSION DESC);
+CREATE UNIQUE INDEX JCR_IDX_SITEM_PARENT_ID ON JCR_SITEM(I_CLASS, CONTAINER_NAME,
PARENT_ID, ID, VERSION DESC);
+CREATE INDEX JCR_IDX_SITEM_PARENT_N_ORDER_NUM ON JCR_SITEM(I_CLASS, CONTAINER_NAME,
PARENT_ID, N_ORDER_NUM, ID);
+CREATE TABLE JCR_SVALUE(
+ ID SERIAL NOT NULL,
+ DATA LONGBLOB,
+ ORDER_NUM INTEGER NOT NULL,
+ PROPERTY_ID VARCHAR(56) NOT NULL,
+ STORAGE_DESC VARCHAR(512),
+ CONSTRAINT JCR_PK_SVALUE PRIMARY KEY(ID)
+ CONSTRAINT JCR_FK_SVALUE_PROPERTY FOREIGN KEY(PROPERTY_ID) REFERENCES JCR_SITEM(ID)
+) ENGINE=MyISAM;
+CREATE UNIQUE INDEX JCR_IDX_SVALUE_PROPERTY ON JCR_SVALUE(PROPERTY_ID, ORDER_NUM);
+CREATE INDEX JCR_IDX_SVALUE_STORAGE_DESC ON JCR_SVALUE(PROPERTY_ID, STORAGE_DESC);
+CREATE TABLE JCR_SREF(
+ NODE_ID VARCHAR(56) NOT NULL,
+ PROPERTY_ID VARCHAR(56) NOT NULL,
+ ORDER_NUM INTEGER NOT NULL,
+ CONSTRAINT JCR_PK_SREF PRIMARY KEY(NODE_ID, PROPERTY_ID, ORDER_NUM)
+) ENGINE=MyISAM;
+CREATE UNIQUE INDEX JCR_IDX_SREF_PROPERTY ON JCR_SREF(PROPERTY_ID, ORDER_NUM);
\ No newline at end of file
Added:
jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-sjdbc.mysql-myisam.sql
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-sjdbc.mysql-myisam.sql
(rev 0)
+++
jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-sjdbc.mysql-myisam.sql 2011-11-02
15:13:21 UTC (rev 5150)
@@ -0,0 +1,40 @@
+CREATE TABLE JCR_SCONTAINER(
+ VERSION VARCHAR(96) NOT NULL,
+ CONSTRAINT JCR_PK_SCONTAINER PRIMARY KEY(VERSION)
+) ENGINE=MyISAM;
+CREATE TABLE JCR_SITEM(
+ ID VARCHAR(96) NOT NULL,
+ PARENT_ID VARCHAR(96) NOT NULL,
+ NAME VARCHAR(512) CHARSET latin1 COLLATE latin1_general_cs NOT NULL,
+ VERSION INTEGER NOT NULL,
+ CONTAINER_NAME VARCHAR(96) NOT NULL,
+ I_CLASS INTEGER NOT NULL,
+ I_INDEX INTEGER NOT NULL,
+ N_ORDER_NUM INTEGER,
+ P_TYPE INTEGER,
+ P_MULTIVALUED BOOLEAN,
+ CONSTRAINT JCR_PK_SITEM PRIMARY KEY(ID),
+ CONSTRAINT JCR_FK_SITEM_PARENT FOREIGN KEY(PARENT_ID) REFERENCES JCR_SITEM(ID)
+) ENGINE=MyISAM;
+CREATE UNIQUE INDEX JCR_IDX_SITEM_PARENT ON JCR_SITEM(CONTAINER_NAME, PARENT_ID, NAME,
I_INDEX, I_CLASS, VERSION DESC);
+CREATE UNIQUE INDEX JCR_IDX_SITEM_PARENT_NAME ON JCR_SITEM(I_CLASS, CONTAINER_NAME,
PARENT_ID, NAME, I_INDEX, VERSION DESC);
+CREATE UNIQUE INDEX JCR_IDX_SITEM_PARENT_ID ON JCR_SITEM(I_CLASS, CONTAINER_NAME,
PARENT_ID, ID, VERSION DESC);
+CREATE INDEX JCR_IDX_SITEM_PARENT_N_ORDER_NUM ON JCR_SITEM(I_CLASS, CONTAINER_NAME,
PARENT_ID, N_ORDER_NUM, ID);
+CREATE TABLE JCR_SVALUE(
+ ID SERIAL NOT NULL,
+ DATA LONGBLOB,
+ ORDER_NUM INTEGER NOT NULL,
+ PROPERTY_ID VARCHAR(96) NOT NULL,
+ STORAGE_DESC VARCHAR(512),
+ CONSTRAINT JCR_PK_SVALUE PRIMARY KEY(ID),
+ CONSTRAINT JCR_FK_SVALUE_PROPERTY FOREIGN KEY(PROPERTY_ID) REFERENCES JCR_SITEM(ID)
+) ENGINE=MyISAM;
+CREATE UNIQUE INDEX JCR_IDX_SVALUE_PROPERTY ON JCR_SVALUE(PROPERTY_ID, ORDER_NUM);
+CREATE INDEX JCR_IDX_SVALUE_STORAGE_DESC ON JCR_SVALUE(PROPERTY_ID, STORAGE_DESC);
+CREATE TABLE JCR_SREF(
+ NODE_ID VARCHAR(96) NOT NULL,
+ PROPERTY_ID VARCHAR(96) NOT NULL,
+ ORDER_NUM INTEGER NOT NULL,
+ CONSTRAINT JCR_PK_SREF PRIMARY KEY(NODE_ID, PROPERTY_ID, ORDER_NUM)
+) ENGINE=MyISAM;
+CREATE UNIQUE INDEX JCR_IDX_SREF_PROPERTY ON JCR_SREF(PROPERTY_ID, ORDER_NUM);