On Wed, 16 Jan 2008 11:49:21 +0100, Thomas Mortagne wrote
> 2008/1/16, rssh <[EMAIL PROTECTED]>:
> > > > - hsqldb :
> > > >   - virtual :  change main wiki database name  and correctly apply
> > > > prefix (could be usefull)
> > > >   - non-virtual : updateSchipt is done in toto and retrieve/save
> > > > document in PUBLIC (not ok)
> >
> >
> >   Are you running hsql in file or server mode ?
> > (I try to reproduce error).
> 
> XWiki's default hsql mode which is file.
> 

I've found the reason of failure: setDatabase was enabled only for virtual
xwiki-s 
 
patch is attached  (tested with hsql in non-virtual mode in addition to oracle
in virtual/unvirtual).  I will attach one to jira thought few seconds.

P.S.  also note, that exitsts hibernate property 'default_schema' which (when
we change name) must not conflict with xwiki.db


> > _______________________________________________
> > devs mailing list
> > [email protected]
> > http://lists.xwiki.org/mailman/listinfo/devs
> >
> 
> -- 
> Thomas Mortagne
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs



--
Ruslan Shevchenko
GradSoft. http://www.gradsoft.ua

Index: xwiki-platform-core/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java
===================================================================
--- xwiki-platform-core/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java	(revision 6802)
+++ xwiki-platform-core/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java	(working copy)
@@ -255,6 +255,7 @@
      */
     public void updateSchema(XWikiContext context) throws HibernateException
     {
+        log.debug("updateSchema: context.database is:"+context.getDatabase());
         updateSchema(context, false);
     }
 
@@ -323,7 +324,7 @@
      * @return the database/schema name.
      * @since XWiki Core 1.1.2, XWiki Core 1.2M2
      */
-    protected String getSchemaFromWikiName(String wikiName, XWikiContext context)
+    protected String getSchemaFromWikiName(String wikiName, XWikiContext context) throws XWikiException
     {
         if (wikiName == null) {
             return null;
@@ -331,14 +332,36 @@
 
         DatabaseProduct databaseProduct = getDatabaseProductName(context);
 
-        if (databaseProduct == DatabaseProduct.DERBY) {
-            return wikiName.equalsIgnoreCase(context.getMainXWiki()) ? "APP" : wikiName.replace(
-                '-', '_');
-        } else if (databaseProduct == DatabaseProduct.HSQLDB) {
-            return wikiName.equalsIgnoreCase(context.getMainXWiki()) ? "PUBLIC" : wikiName
-                .replace('-', '_');
-        } else
-            return wikiName.replace('-', '_');
+        String retval  = wikiName.replace('-','_');
+        boolean isMain = wikiName.equalsIgnoreCase(context.getMainXWiki());
+        XWiki   wiki = context.getWiki();
+               
+        if (isMain) {
+            String configuredMainDatabaseSchemaName = wiki.Param("xwiki.db","");
+            if (configuredMainDatabaseSchemaName.length()!=0) {
+                retval=configuredMainDatabaseSchemaName;
+            }else{
+                if (databaseProduct == DatabaseProduct.DERBY) {
+                   retval="APP";    
+                }else if (databaseProduct == DatabaseProduct.HSQLDB) {
+                   retval = "PUBLIC";                   
+                }
+            }
+        }else{
+            // virtual
+            String configurableVirtualDabaseSchemaPrefix = 
+                                  wiki.Param("xwiki.virtual.db.prefix","");
+            if (configurableVirtualDabaseSchemaPrefix.length()!=0) {
+                retval = configurableVirtualDabaseSchemaPrefix + retval;
+            }
+        }
+
+        if (log.isDebugEnabled()) {
+            log.debug("schema for wiki " + context.getDatabase()+" is "+retval);
+        }
+
+        return retval;
+                
     }
 
     /**
@@ -348,7 +371,7 @@
      * @return the database/schema name.
      * @since XWiki Core 1.1.2, XWiki Core 1.2M2
      */
-    protected String getSchemaFromWikiName(XWikiContext context)
+    protected String getSchemaFromWikiName(XWikiContext context) throws XWikiException
     {
         return getSchemaFromWikiName(context.getDatabase(), context);
     }
@@ -544,7 +567,7 @@
      */
     public void setDatabase(Session session, XWikiContext context) throws XWikiException
     {
-        if (isVirtual(context)) {
+        if (isVirtual(context)||context.getWiki().Param("xwiki.db")!=null) {
             try {
                 if (log.isDebugEnabled())
                     log.debug("Switch database to: " + context.getDatabase());
Index: xwiki-platform-core/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java
===================================================================
--- xwiki-platform-core/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java	(revision 6802)
+++ xwiki-platform-core/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java	(working copy)
@@ -249,7 +249,7 @@
      */
     private static File tempDir = null;
 
-    private static String getConfigPath() throws NamingException
+    private static String getConfigPath() 
     {
         if (configPath == null) {
             try {
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to