bugfix for treeindex updater
authorAndreas Müller <a.mueller@bgbm.org>
Tue, 3 Sep 2013 10:22:51 +0000 (10:22 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Tue, 3 Sep 2013 10:22:51 +0000 (10:22 +0000)
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/TreeIndexUpdater.java

index f1225d4d1a65831cc6a2890f7d9a6dfcb131176a..15045f1b86e22a7308a24dd31278d7567dc093b7 100644 (file)
@@ -13,6 +13,7 @@ import org.apache.log4j.Logger;
 \r
 import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;\r
 import eu.etaxonomy.cdm.database.ICdmDataSource;\r
+import eu.etaxonomy.cdm.model.common.ITreeNode;\r
 \r
 /**\r
  * @author a.mueller\r
@@ -50,18 +51,23 @@ public class TreeIndexUpdater extends AuditedSchemaUpdaterStepBase<TreeIndexUpda
                        \r
        //              String charType = "CHAR";  //TODO may depend on database type\r
                        \r
-                       //clean up  //this should not happen with correct "delete" implementation\r
+                       //clean up nodes without classification  //this should not happen with correct "delete" implementation\r
                        String sql = String.format(" DELETE FROM %s WHERE %s IS NULL ", tableName, treeIdColumnName);\r
                        datasource.executeUpdate(sql);\r
                        \r
+                       //... set all index entries to NULL\r
                        sql = String.format(" UPDATE %s SET %s = NULL", tableName, indexColumnName);\r
                        datasource.executeUpdate(sql);\r
                        \r
                        //start\r
+                       String separator = ITreeNode.separator;\r
+                       String treePrefix = ITreeNode.treePrefix;\r
                        sql = String.format(" UPDATE %s tn " +\r
-                                       " SET tn.%s = CONCAT('#c', tn.%s, '#') " +\r
+                                       " SET tn.%s = CONCAT('%s%s', tn.%s, '%s', tn.id, '%s') " +\r
                                        " WHERE tn.%s IS NULL AND tn.%s IS NOT NULL ", \r
-                                       tableName, indexColumnName, treeIdColumnName, parentIdColumnName, treeIdColumnName);\r
+                                               tableName, \r
+                                               indexColumnName, separator, treePrefix, treeIdColumnName, separator, separator, \r
+                                               parentIdColumnName, treeIdColumnName);\r
                        datasource.executeUpdate(sql);\r
                        \r
                        //width search index creation\r
@@ -74,9 +80,10 @@ public class TreeIndexUpdater extends AuditedSchemaUpdaterStepBase<TreeIndexUpda
                        do {\r
                        \r
                                sql = String.format(" UPDATE %s child INNER JOIN %s parent ON child.%s = parent.id " +\r
-                                               " SET child.%s = CONCAT( parent.%s, child.id, '#') " +\r
+                                               " SET child.%s = CONCAT( parent.%s, child.id, '%s') " +\r
                                                " WHERE parent.%s IS NOT NULL AND child.%s IS NULL ", \r
-                                                       tableName, tableName, parentIdColumnName, indexColumnName, indexColumnName,\r
+                                                       tableName, tableName, parentIdColumnName, \r
+                                                       indexColumnName, indexColumnName, separator,\r
                                                        indexColumnName, indexColumnName);\r
                                datasource.executeUpdate(sql);\r
                                \r