# HG changeset patch # User casties # Date 1428609831 0 # Node ID d71f28dac165184478e19910eb9baaa6ffdae744 # Parent dc458969f47958dfab774178b71560919bce8c4d FixRelationNonCurrent now fixes relations with non-current sources. diff -r dc458969f479 -r d71f28dac165 pom.xml --- a/pom.xml Thu Apr 09 17:31:55 2015 +0000 +++ b/pom.xml Thu Apr 09 20:03:51 2015 +0000 @@ -204,6 +204,7 @@ org.apache.maven.plugins maven-source-plugin + 2.4 attach-sources diff -r dc458969f479 -r d71f28dac165 src/main/java/org/mpi/openmind/scripts/FixRelationNonCurrent.java --- a/src/main/java/org/mpi/openmind/scripts/FixRelationNonCurrent.java Thu Apr 09 17:31:55 2015 +0000 +++ b/src/main/java/org/mpi/openmind/scripts/FixRelationNonCurrent.java Thu Apr 09 20:03:51 2015 +0000 @@ -1,6 +1,3 @@ -/** - * - */ package org.mpi.openmind.scripts; import java.sql.Connection; @@ -11,15 +8,29 @@ import java.util.List; /** + * Fixes relations with sources or targets that do not point to the current + * versions of the respective entities. + * * @author casties * */ public class FixRelationNonCurrent { - public static void show(String dbUser, String dbPw) { + public static int show(String dbUser, String dbPw) { Connection conn = DBUtils.getConn(dbUser, dbPw); - List relIds = getRelIds(conn); - for (Long id : relIds) { + List sourceRelIds = getRelIds("source", conn); + for (Long id : sourceRelIds) { + System.out.println("RELATION "+id+" source is not CURRENT_VERSION"); + int ncv = getCurrentVersionTime(id, conn).size(); + if (ncv == 1) { + System.out.println(" RELATION "+id+" can be fixed"); + } else { + System.out.println(" ERROR: RELATION " + id + " has " + ncv + " CURRENT_VERSIONs"); + } + } + System.out.println(); + List targetRelIds = getRelIds("target", conn); + for (Long id : targetRelIds) { System.out.println("RELATION "+id+" target is not CURRENT_VERSION"); int ncv = getCurrentVersionTime(id, conn).size(); if (ncv == 1) { @@ -28,31 +39,62 @@ System.out.println(" ERROR: RELATION "+id+" has " + ncv + " CURRENT_VERSIONs"); } } - System.out.println(relIds.size() + " RELATION targets are not CURRENT_VERSION"); + System.out.println(); + System.out.println(sourceRelIds.size() + " RELATION sources are not CURRENT_VERSION"); + System.out.println(targetRelIds.size() + " RELATION targets are not CURRENT_VERSION"); + try { + conn.close(); + } catch (SQLException e) { + } + if (sourceRelIds.size() > 0 || targetRelIds.size() > 0) { + return 1; + } + return 0; } - public static void repair(String dbUser, String dbPw) { + public static int repair(String dbUser, String dbPw) { Connection conn = DBUtils.getConn(dbUser, dbPw); - List relIds = getRelIds(conn); - int fixed = 0; - for (Long id : relIds) { - System.out.println("RELATION "+id+" target is not CURRENT_VERSION"); - if (updateCurrentRelationTarget(id, conn)) { + List relSourceIds = getRelIds("source", conn); + int fixedSs = 0; + for (Long id : relSourceIds) { + System.out.println("RELATION "+id+" source is not CURRENT_VERSION"); + if (updateCurrentRelation(id, "source", conn)) { System.out.println(" RELATION "+id+" target updated to current version"); - fixed += 1; + fixedSs += 1; } else { System.out.println(" ERROR: RELATION "+id+" was not fixed!"); } } - System.out.println(relIds.size() + " RELATION targets are not CURRENT_VERSION"); - System.out.println(fixed + " RELATION targets were fixed."); + List relTargetIds = getRelIds("target", conn); + int fixedTs = 0; + for (Long id : relTargetIds) { + System.out.println("RELATION "+id+" target is not CURRENT_VERSION"); + if (updateCurrentRelation(id, "target", conn)) { + System.out.println(" RELATION "+id+" target updated to current version"); + fixedTs += 1; + } else { + System.out.println(" ERROR: RELATION "+id+" was not fixed!"); + } + } + System.out.println(relSourceIds.size() + " RELATION sources are not CURRENT_VERSION"); + System.out.println(relTargetIds.size() + " RELATION targets are not CURRENT_VERSION"); + System.out.println(fixedSs + " RELATION sources were fixed."); + System.out.println(fixedTs + " RELATION targets were fixed."); + try { + conn.close(); + } catch (SQLException e) { + } + if (relSourceIds.size() > fixedSs || relTargetIds.size() > fixedTs) { + return 1; + } + return 0; } - public static List getRelIds(Connection conn) { + public static List getRelIds(String type, Connection conn) { List relIds = new ArrayList(); String qTargetRels = "select rel.id from openmind.node rel, openmind.node ent " - + "where rel.target_id = ent.id " - + "and rel.target_modif = ent.modification_time " + + "where rel." + type + "_id = ent.id " + + "and rel." + type + "_modif = ent.modification_time " + "and rel.node_type = 'RELATION' " + "and rel.system_status = 'CURRENT_VERSION' " + "and ent.system_status != 'CURRENT_VERSION' "; @@ -64,7 +106,7 @@ long id = rTargetRels.getLong(1); relIds.add(id); } - + sTargetRels.close(); } catch (SQLException e) { e.printStackTrace(); } @@ -83,15 +125,16 @@ long mtime = results.getLong(1); times.add(mtime); } + statement.close(); } catch (SQLException e) { e.printStackTrace(); } return times; } - public static boolean updateCurrentRelationTarget(Long id, Connection conn) { + public static boolean updateCurrentRelation(Long id, String type, Connection conn) { // get target_id of relation - String qTargetId = "select target_id from openmind.node " + String qTargetId = "select " + type + "_id from openmind.node " + "where id = " + id.toString() + " " + "and system_status = 'CURRENT_VERSION' "; try { @@ -104,16 +147,18 @@ if (target_mtimes.size() == 1) { // update target_mtime of relation String qUpdate = "update openmind.node " - + "set target_modif = " + target_mtimes.get(0).toString() + " " + + "set " + type + "_modif = " + target_mtimes.get(0).toString() + " " + "where id = " + id.toString() + " " + "and system_status = 'CURRENT_VERSION' "; Statement sUpdate = conn.createStatement(); int rUpdate = sUpdate.executeUpdate(qUpdate); + sUpdate.close(); return true; } else { - System.out.println("ERROR: relation target " + target_id + " has " + target_mtimes.size() + " CURRENT_VERSIONs"); + System.out.println("ERROR: relation " + type + target_id + " has " + target_mtimes.size() + " CURRENT_VERSIONs"); } } + sTargetId.close(); } catch (SQLException e) { e.printStackTrace(); } @@ -124,17 +169,21 @@ * @param args */ public static void main(String[] args) { - if (args.length == 3) { + int rc = 0; + if (args.length > 1 && args.length < 4) { String user = args[1]; - String pw = args[2]; + String pw = (args.length == 3) ? args[2] : null; if (args[0].equalsIgnoreCase("fix")) { - repair(user, pw); + rc = repair(user, pw); } else { - show(user, pw); + rc = show(user, pw); } } else { System.out.println("Parameter/s not found! Should be: mode(SHOW/FIX), mysql_user, mysql_password"); + System.out.println(" got: "+args.toString() + "("+args.length+")"); + System.exit(1); } + System.exit(rc); } }