--- FM2SQL/src/Convert.java 2005/04/22 10:57:32 1.11
+++ 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;
@@ -124,7 +123,7 @@ class Convert
final static int numIntervalls = 4;
- static boolean debug = !false;
+ static boolean debug = false;
static boolean isGUI = true;
@@ -138,15 +137,16 @@ class Convert
static Vector postSQLCommands = new Vector();
- static final String versionID = new String("FM2SQL Version 0.9.2b\n");
+ static final String versionID = new String("FM2SQL Version 0.9.9b\n");
private static boolean noError = false;
public static void main(String args[]) throws IOException
{
- DateFormat d = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT,
- Locale.GERMANY);
- System.out.println(convertText("rogoistSuper" + "_" + d.format(new Date()).replace(':', '_')));
+ // DateFormat d = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT,
+ // Locale.GERMANY);
+ // System.out.println(convertText("rogoistSuper" + "_" + d.format(new Date()).replace(':', '_')));
+
/*
* try { //byte[] b = "�".getBytes("UTF-8"); //
* System.out.println("QueryString " +b[0]+" "+b[1]+(new
@@ -539,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());
@@ -588,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());
}
}
@@ -656,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
@@ -682,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
@@ -697,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() + "'";
@@ -726,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));
}
@@ -1117,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();)
{
@@ -1174,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();
@@ -1196,6 +1212,8 @@ class Convert
selects = new Vector();
creates = new Vector();
ids = new Vector();
+ destIDs = new Vector();
+
preSQLCommands = new Vector();
postSQLCommands = new Vector();
@@ -1268,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);
@@ -1299,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");
@@ -1307,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 !!");
@@ -1328,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();
@@ -1521,6 +1547,7 @@ class Convert
*/
public static class DataBase
{
+
DBBean bean;
Vector creates;
@@ -1532,6 +1559,7 @@ class Convert
Vector tables = new Vector();
Vector ids;
+ Vector destIDs;
String delimiter = "//";
@@ -1598,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";
@@ -1876,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() + "'";
@@ -1901,7 +1931,6 @@ class Convert
/**
* synchronize method based on delete method code
- *
* @param source
* @param destination
* @param names
@@ -1910,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!!!");
@@ -1946,6 +1977,7 @@ class Convert
java.util.TreeSet myIdsDest = new TreeSet();
int deltaID = 1;
String idField = "";
+ String destIDField = "";
String destTableName = "";
try
@@ -1966,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);
@@ -2006,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();
@@ -2023,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());
@@ -2036,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);
@@ -2070,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
@@ -2100,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
@@ -2119,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() + "'";
@@ -2185,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();
@@ -2233,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);
@@ -2246,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)
@@ -2276,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)
{