--- FM2SQL/Attic/Convert.java 2004/08/02 11:39:23 1.65 +++ FM2SQL/Attic/Convert.java 2004/08/03 11:41:16 1.66 @@ -29,6 +29,7 @@ import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; import java.sql.Types; +import java.text.ParseException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -2000,6 +2001,8 @@ class Convert { long startTime = System.currentTimeMillis(); int counter = -1; + TreeSet linesToDelete = null; + PreparedStatement delPSt = null; while (true) { ++counter; @@ -2016,7 +2019,7 @@ class Convert rowCount = vec.size(); // Deletion will work this way Vector deleted = new Vector(vec); - TreeSet linesToDelete = new TreeSet(vecDest); + linesToDelete = new TreeSet(vecDest); TreeSet linesToAppend = new TreeSet(vec); // remove all lines that are already in dest database @@ -2025,126 +2028,78 @@ class Convert linesToDelete.removeAll(deleted); System.out.println("linesToAppend " + linesToAppend + " " + vecDest + " " + destTableName); System.out.println("linesToDelete " + linesToDelete + " " + vecDest + " " + destTableName); - // prepare new query for next chunk - if (query.indexOf("where") > 0) - tempQuery = query + " and " + tempID + ">='" + vec.firstElement() + "' and " + tempID + "<='" + vec.lastElement() + "' order by " + tempID; - else - tempQuery = query + " where " + tempID + ">='" + vec.firstElement() + "' and " + tempID + "<='" + vec.lastElement() + "'"; // order by "+tempID; - System.out.println("tempQuery is now " + tempQuery + " order by " + tempID); - // bean.makeQuery(tempQuery,vec.size()); - + System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIds.size()); + deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls); ConversionProperties prop = getFieldNamesAndDestTableName(creates.get(tbIndex).toString(), query, names.get(tbIndex).toString()); StringBuffer insCommand = createInsertCommand(prop.destTableName, prop.fieldNames); - StringBuffer updCommand = createUpdateCommand(prop.destTableName, prop.fieldNames, tempID); - StringBuffer delCommand = createDeleteCommand(destTableName,tempID); + StringBuffer updCommand = createUpdateCommand(prop.destTableName, prop.fieldNames, tempID); + StringBuffer delCommand = createDeleteCommand(destTableName, tempID); PreparedStatement insPst = beanDest.getConnection().prepareStatement(insCommand.toString()); PreparedStatement updPst = beanDest.getConnection().prepareStatement(updCommand.toString()); - PreparedStatement delPSt = beanDest.getConnection().prepareStatement(delCommand.toString()); - Vector[] vectors = bean.getQueryData(tempQuery, vec.size()); - int idIndex = vectors[1].indexOf(idField); - // todo arraylist code has to be added - for (Iterator iter = vectors[0].iterator(); iter.hasNext();) + delPSt = beanDest.getConnection().prepareStatement(delCommand.toString()); + + if (vec.size() <= numIntervalls) { - Vector line = (Vector) iter.next(); - Object lineIDIndex = line.get(idIndex); - System.out.println("line " + linesToDelete.contains(line.get(idIndex))+" "+lineIDIndex); - if (linesToAppend.contains(lineIDIndex)) - { - for (int l = 0; l < line.size(); ++l) - { - Object obj = line.get(l); - if (obj != null) - insPst.setString(l + 1, obj.toString()); - else - insPst.setNull(l + 1, Types.NULL); - } - insPst.execute(); - - } - - else // update - { - for (int l = 0; l < line.size(); ++l) - { - Object obj = line.get(l); - if (obj != null) - updPst.setString(l + 1, obj.toString()); - else - updPst.setNull(l + 1, Types.NULL); - } - updPst.setString(line.size()+1,line.get(idIndex).toString()); - updPst.execute(); - - } + endIndex = 0; + deltaID = vec.size(); } - - // delPSt.setString(1,"6"); - // delPSt.setString(1,"7"); - // delPSt.setString(1,"8"); - - //delPSt.execute(); - System.out.println(); - // System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIdsDest.size()); - /// @TODO complete delete task remove query show lines to be deleted let user choose if he wants that - System.out.println("number of lines to be deleted " + linesToDelete.size()); - deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls); - System.out.println("deltaID " + deltaID); - //System.out.println(); - - if (true) - return; - - beanDest.setConnection(destination); - - Statement stm = beanDest.getConnection().createStatement(); - - Vector tables = beanDest.getTableNames(); - // Collections.sort(tables); - System.out.println(names.get(tbIndex) + " " + tables.indexOf(convertText((String) names.get(tbIndex)))); // "//beanDest.getTypeNames()); - tables = beanDest.getTableNames(); - // System.out.println(beanDest.getTableNames(beanDest.getCatalogs().get(2).toString())); - stm = beanDest.getConnection().createStatement(); - - if (dialog != null) - dialog.title.setText(" Deleting table data ..."); - - int j = -1; + for (int k = 0; k < vec.size() - deltaID; k = k + deltaID) + { + System.out.println(vec.get(k) + " " + vec.get(k + deltaID) + " " + vec.lastElement()); + if (query.indexOf("where") > 0) + tempQuery = query + " and " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'"; + else + tempQuery = query + " where " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'"; + System.out.println(tempQuery); + if (dialog != null) + dialog.title.setText("Reading table data ..."); - Vector row = null; - command = new StringBuffer(); + // bean.makeQuery(tempQuery, deltaID); + if (dialog != null) + dialog.title.setText("Writing table data ..."); - command.append("DELETE FROM"); - command.append(beanDest.getQC()); - command.append(destTableName); - //command.append(convertText((String) names.get(tbIndex))); - command.append(beanDest.getQC()); - int size = bean.getColumnNames().size(); - command.append("WHERE " + convertText(ids.get(tbIndex).toString()) + " = ?"); - PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString()); - System.out.println(command + " " + tbIndex); - //int rowCount = bean.getRowCount(query); - // int idIndex = bean.getColumnNames().indexOf(ids.get(tbIndex)); -/* while (true) + performSynchronize(idField, vec, tempQuery, linesToDelete, linesToAppend, insPst, updPst, delPSt, deltaID); + // System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIdsDest.size()); + endIndex = k + deltaID; + } + System.out.println(endIndex); + //all data written ? if not write last chunk of data + if (endIndex == vec.size() - 1) + System.out.println("fits"); + else { + System.out.println(" last intervall from " + vec.get(endIndex) + " " + vec.lastElement()); - ++j; - if (j == linesToDelete.size()) - break; - //print rows - pstm.setString(1, linesToDelete.get(j).toString()); - System.out.println(pstm.toString()); - pstm.execute(); + if (query.indexOf("where") > 0) + tempQuery = query + " and " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'"; + else + tempQuery = query + " where " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'"; + System.out.println(tempQuery); if (dialog != null) - dialog.progress.setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0)); - command = null; + dialog.title.setText("Reading table data ..."); + bean.makeQuery(tempQuery, 0); + if (dialog != null) + dialog.title.setText("Writing table data ..."); + performSynchronize(idField, vec, tempQuery, linesToDelete, linesToAppend, insPst, updPst, delPSt, deltaID); + // System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIdsDest.size()); } // prepare new query for next chunk if (query.indexOf("where") > 0) tempQuery = query + " and " + tempID + ">'" + vec.lastElement() + "'"; else tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'"; -*/ - } //to outer while + + } + for (Iterator iter = linesToDelete.iterator(); iter.hasNext();) + { + String id = (String) iter.next(); + delPSt.setString(1, id); + delPSt.execute(); + + } + + long endTime = System.currentTimeMillis(); + System.out.println("Time for incremental synchronize elapsed " + (endTime - startTime)); } // to idfield if } // table loop @@ -2171,6 +2126,55 @@ class Convert dialog.setVisible(false); } + } + private static void performSynchronize( + String idField, + Vector vec, + String tempQuery, + TreeSet linesToDelete, + TreeSet linesToAppend, + PreparedStatement insPst, + PreparedStatement updPst, + PreparedStatement delPSt, + int deltaID) + throws SQLException, ParseException + { + Vector[] vectors = bean.getQueryData(tempQuery, deltaID); + int idIndex = vectors[1].indexOf(idField); + // todo arraylist code has to be added + for (Iterator iter = vectors[0].iterator(); iter.hasNext();) + { + Vector line = (Vector) iter.next(); + Object lineIDIndex = line.get(idIndex); + System.out.println("line " + linesToAppend.contains(line.get(idIndex)) + " " + lineIDIndex); + if (linesToAppend.contains(lineIDIndex)) + { + for (int l = 0; l < line.size(); ++l) + { + Object obj = line.get(l); + if (obj != null) + insPst.setString(l + 1, obj.toString()); + else + insPst.setNull(l + 1, Types.NULL); + } + insPst.execute(); + + } else // update + { + for (int l = 0; l < line.size(); ++l) + { + Object obj = line.get(l); + if (obj != null) + updPst.setString(l + 1, obj.toString()); + else + updPst.setNull(l + 1, Types.NULL); + } + updPst.setString(line.size() + 1, line.get(idIndex).toString()); + updPst.execute(); + + } + } + } // to method /** @@ -3770,6 +3774,6 @@ class Convert //command.append(convertText((String) names.get(tbIndex))); command.append(beanDest.getQC()); command.append("WHERE " + idField + " = ?"); - return command; + return command; } } \ No newline at end of file