--- FM2SQL/src/Convert.java 2005/04/22 11:03:53 1.12 +++ FM2SQL/src/Convert.java 2005/09/22 12:24:30 1.15 @@ -36,7 +36,6 @@ import java.util.Date; import java.util.Hashtable; import java.util.Iterator; import java.util.List; -import java.util.Locale; import java.util.StringTokenizer; import java.util.TreeSet; import java.util.Vector; @@ -138,7 +137,7 @@ class Convert static Vector postSQLCommands = new Vector(); - static final String versionID = new String("FM2SQL Version 0.9.5b\n"); + static final String versionID = new String("FM2SQL Version 0.9.9b\n"); private static boolean noError = false; @@ -540,12 +539,22 @@ class Convert destTableName = prop.destTableName; if (mode == Convert.DataBase.CONVERT_TEMP_MODE) { + String tableNameSave=destTableName; destTableName += _TEMP; + if(creates.get(tbIndex)!="") + { + System.out.println("Changed tablename of create statement to "+destTableName); + StringBuffer buffer=new StringBuffer(creates.get(tbIndex).toString()); + int startIndex = buffer.indexOf(tableNameSave); + buffer.replace(startIndex,startIndex+tableNameSave.length(),destTableName); + creates.set(tbIndex,buffer.toString()); + } } + System.out.println("destTableName is now "+destTableName); + fieldNames = prop.fieldNames; if (mode == Convert.DataBase.CONVERT_MODE || mode == Convert.DataBase.CONVERT_TEMP_MODE) { - if (tables.indexOf(destTableName) >= 0) { stm.executeUpdate("drop table " + beanDest.getQC() + destTableName + beanDest.getQC()); @@ -589,8 +598,10 @@ class Convert command.append(" )"); } else - command = new StringBuffer().append(creates.get(tbIndex).toString().toLowerCase()); - stm.executeUpdate(command.toString()); + { + command = new StringBuffer().append(creates.get(tbIndex).toString()); + } + stm.executeUpdate(command.toString()); } } @@ -657,7 +668,7 @@ class Convert 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) + if (query.toLowerCase().indexOf("where") > 0) tempQuery = query + " and " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'"; else @@ -683,7 +694,7 @@ class Convert System.out.println(" last intervall from " + vec.get(endIndex) + " " + vec.lastElement()); - if (query.indexOf("where") > 0) + if (query.toLowerCase().indexOf("where") > 0) tempQuery = query + " and " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'"; else @@ -698,7 +709,7 @@ class Convert command = writeDatainDestTable(dialog, command, endIndex, pstm, rowCount, delimiter); } // prepare new query for next chunk - if (query.indexOf("where") > 0) + if (query.toLowerCase().indexOf("where") > 0) tempQuery = query + " and " + tempID + ">'" + vec.lastElement() + "'"; else tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'"; @@ -727,14 +738,16 @@ class Convert // TODO if (beanDest.getTableNames().contains(originalName)) { - DateFormat d = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); + DateFormat d = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM); d.setTimeZone(java.util.TimeZone.getTimeZone("CET")); - + String date = d.format(new Date()); date = date.replace(':', '_'); - renameTable(beanDest, addQuotes(beanDest, originalName), addQuotes(beanDest, - convertText(originalName + "_" + date))); + String newName = addQuotes(beanDest, convertText(originalName + "_" + date)); + // rename table to newName + renameTable(beanDest, addQuotes(beanDest, originalName), newName); } + // rename Table_temp to originalName renameTable(beanDest, addQuotes(beanDest, destTableName), addQuotes(beanDest, originalName)); } @@ -1118,7 +1131,7 @@ class Convert passwdDest = database.passwd; synchronize(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates, - db.ids, mode, db.delimiter, new Vector(db.htIndex.values())); + db.ids, mode, db.delimiter, new Vector(db.htIndex.values()), db.destIDs); } for (Iterator iterator = db.postCommands.iterator(); iterator.hasNext();) { @@ -1175,6 +1188,8 @@ class Convert Vector selects = new Vector(); Vector creates = new Vector(); Vector ids = new Vector(); + Vector destIDs = new Vector(); + Vector preSQLCommands = new Vector(); Vector postSQLCommands = new Vector(); @@ -1197,6 +1212,8 @@ class Convert selects = new Vector(); creates = new Vector(); ids = new Vector(); + destIDs = new Vector(); + preSQLCommands = new Vector(); postSQLCommands = new Vector(); @@ -1269,6 +1286,7 @@ class Convert else if (modeString.equals("convert_temp")) mode = DataBase.CONVERT_TEMP_MODE; + System.out.println("mode ist "+mode); // if(node3!=null) // System.out.println(node3.name); @@ -1300,7 +1318,9 @@ class Convert String name = (String) node4.attributes.get("name"); String layout = (String) node4.attributes.get("layout"); String id = (String) node4.attributes.get("id"); + String destID = (String) node4.attributes.get("targetID"); System.out.println("id was " + id); + System.out.println("targetID was " + destID); if (name == null) throw new Error("parse error required table tag attribute name missing"); @@ -1308,11 +1328,15 @@ class Convert layout = ""; if (id == null) id = ""; + if (destID == null) + destID = id ; + if (name.equals("")) throw new Error("parse error table tag attribute must not be empty"); tables.add(name.intern()); layouts.add(layout.intern()); ids.add(id.intern()); + destIDs.add(destID.intern()); String query = (node5 == null) ? "" : node5.getCharacters(); if (query.equals("")) System.err.println("Warning empty select tag or select tag missing !!"); @@ -1329,6 +1353,7 @@ class Convert dataBase.delimiter = delimiter; dataBase.preCommands = new Vector(preSQLCommands); dataBase.postCommands = new Vector(postSQLCommands); + dataBase.destIDs = destIDs; databases.add(dataBase); } DBBean database = new DBBean(); @@ -1522,6 +1547,7 @@ class Convert */ public static class DataBase { + DBBean bean; Vector creates; @@ -1533,6 +1559,7 @@ class Convert Vector tables = new Vector(); Vector ids; + Vector destIDs; String delimiter = "//"; @@ -1599,7 +1626,9 @@ class Convert buffr.write(" " + bean.passwd + "\n"); buffr.write(" " + delimiter + "\n"); String modeString = ""; - if (mode == CONVERT_MODE) + if (mode == CONVERT_TEMP_MODE) + modeString = "convert_temp"; + else if (mode == CONVERT_MODE) modeString = "convert"; else if (mode == APPEND_MODE) modeString = "append"; @@ -1877,7 +1906,7 @@ class Convert command = null; } // prepare new query for next chunk - if (query.indexOf("where") > 0) + if (query.toLowerCase().indexOf("where") > 0) tempQuery = query + " and " + tempID + ">'" + vec.lastElement() + "'"; else tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'"; @@ -1902,7 +1931,6 @@ class Convert /** * synchronize method based on delete method code - * * @param source * @param destination * @param names @@ -1911,12 +1939,14 @@ class Convert * @param creates * @param ids * @param mode + * @param destIDs TODO + * * @throws Exception */ // TODO implement append,update and delete in one method // TODO using id based algorithm public static void synchronize(String source, String destination, Vector names, Vector layouts, - Vector selects, Vector creates, Vector ids, int mode, String delimiter, Vector indexList) + Vector selects, Vector creates, Vector ids, int mode, String delimiter, Vector indexList, java.util.Vector destIDs) throws Exception { System.out.println(" bin in synchronize!!!"); @@ -1947,6 +1977,7 @@ class Convert java.util.TreeSet myIdsDest = new TreeSet(); int deltaID = 1; String idField = ""; + String destIDField = ""; String destTableName = ""; try @@ -1967,7 +1998,7 @@ class Convert bean.getConnection(); bean.makeQuery(query, 50); idField = ids.get(tbIndex).toString(); - + destIDField = (destIDs!=null) ? destIDs.get(tbIndex).toString():convertText(idField); } catch (Exception e) { System.out.println("Warning exception occured \n " + e); @@ -2007,7 +2038,7 @@ class Convert // remove extra query parts // destQuery.substring(0,destQuery.lastIndexOf(destTableName)+destTableName.length()+1); System.out.println("new Query " + tempQueryDest); - System.out.println("idfield " + idField + " " + ids.get(tbIndex).toString()); + System.out.println("idfield " + idField + " " + ids.get(tbIndex).toString()+" targetID is "+destIDField); if (!idField.equals("")) { long startTime = System.currentTimeMillis(); @@ -2024,7 +2055,7 @@ class Convert myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex), tempQuery, 0); - myIdsDest = beanDest.getIDVector(convertText(idField), destTableName, tempQueryDest, 0); + myIdsDest = beanDest.getIDVector(destIDField, destTableName, tempQueryDest, 0); // System.out.println("status of remove // "+myIds.remove("b015892")); System.out.println("ids found for " + idField + " " + !myIds.isEmpty()); @@ -2037,7 +2068,7 @@ class Convert Vector deleted = new Vector(vec); TreeSet linesToAppend = new TreeSet(vec); - linesToAppend.addAll(vec); + // linesToAppend.addAll(vec); linesToDelete = new TreeSet(vecDest); // remove all lines that are already in dest database linesToAppend.removeAll(vecDest); @@ -2071,7 +2102,7 @@ class Convert 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) + if (query.toLowerCase().indexOf("where") > 0) tempQuery = query + " and " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'"; else @@ -2101,7 +2132,7 @@ class Convert System.out.println(" last intervall from " + vec.get(endIndex) + " " + vec.lastElement()); - if (query.indexOf("where") > 0) + if (query.toLowerCase().indexOf("where") > 0) tempQuery = query + " and " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'"; else @@ -2120,7 +2151,7 @@ class Convert // numIntervalls) + " " + myIdsDest.size()); } // prepare new query for next chunk - if (query.indexOf("where") > 0) + if (query.toLowerCase().indexOf("where") > 0) tempQuery = query + " and " + tempID + ">'" + vec.lastElement() + "'"; else tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'"; @@ -2186,7 +2217,7 @@ class Convert // CREATE UNIQUE INDEX title_idx ON films (title); for (Iterator iter = linesToDelete.iterator(); iter.hasNext();) { - String id = (String) iter.next(); + String id = iter.next().toString(); delPSt.setString(1, id); delPSt.execute(); @@ -2234,7 +2265,7 @@ class Convert dialog.title.setText("Retrieving new data"); } - Vector[] vectors = bean.getQueryData(tempQuery, deltaID); + Vector[] vectors = bean.getQueryData(tempQuery, 0); int count = 0, size = vectors[0].size(); int idIndex = vectors[1].indexOf(idField); // System.out.println(idIndex + " " + vectors[1] + " " + idField); @@ -2247,7 +2278,7 @@ class Convert Vector line = (Vector) iter.next(); Object lineIDIndex = line.get(idIndex); if (linesToAppend.contains(lineIDIndex)) - System.out.println("line " + linesToAppend.contains(line.get(idIndex)) + " " + lineIDIndex); + System.out.println("line " + linesToAppend.contains(lineIDIndex) + " " + lineIDIndex); if (linesToAppend.contains(lineIDIndex)) { for (int l = 0; l < line.size(); ++l) @@ -2277,7 +2308,8 @@ class Convert } updPst.setString(line.size() + 1, line.get(idIndex).toString()); // updPst.addBatch(); - // updPst.execute(); + // System.out.println("updating "+line.get(idIndex).toString()+" "+line); + updPst.execute(); } if (dialog != null) {