--- FM2SQL/src/Convert.java 2005/04/22 11:03:53 1.12
+++ FM2SQL/src/Convert.java 2006/09/30 10:58:58 1.16
@@ -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.10b\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));
}
@@ -825,41 +838,39 @@ class Convert
throws Exception, SQLException
{
Vector row;
- while ((row = bean.getNextRow()) != null)
- {
- j++;
- Object obj = null;
- for (int k = 0; k < row.size(); ++k)
- {
- obj = row.get(k);
-
- if (obj instanceof ArrayList)
- obj = formatFileMakerArray((List) obj, delimiter);
-
- String str = (obj == null) ? "NULL" : obj.toString();
- if (obj instanceof Double)
- {
- pstm.setDouble(k + 1, ((Double) obj).doubleValue());
- } else if (!str.equals("NULL"))
- pstm.setString(k + 1, str);
- else
- pstm.setNull(k + 1, Types.NULL);
- }
- pstm.execute();
- if (isGUI)
- dialog.progress.setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0));
- command = null;
- } // to while loop
+ while ((row = bean.getNextRow()) != null) {
+ j++;
+ Object obj = null;
+ for (int k = 0; k < row.size(); ++k) {
+ obj = row.get(k);
+
+ if (obj instanceof ArrayList)
+ obj = formatFileMakerArray((List) obj, delimiter);
+
+ String str = (obj == null) ? "NULL" : obj.toString();
+ if (obj instanceof Double) {
+ pstm.setDouble(k + 1, ((Double) obj).doubleValue());
+ } else if (!str.equals("NULL"))
+ pstm.setString(k + 1, str);
+ else
+ pstm.setNull(k + 1, Types.NULL);
+ }
+ pstm.execute();
+ if (isGUI)
+ dialog.progress
+ .setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0));
+ command = null;
+ } // to while loop
return command;
}
/**
- * removes special characters from the input string as well as .fp5
- *
- * @param newName
- * String to change
- * @return
- */
+ * removes special characters from the input string as well as .fp5
+ *
+ * @param newName
+ * String to change
+ * @return
+ */
public static String convertText(String newName)
{
StringBuffer alterMe = new StringBuffer(newName.trim().toLowerCase());
@@ -1118,7 +1129,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 +1186,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 +1210,8 @@ class Convert
selects = new Vector();
creates = new Vector();
ids = new Vector();
+ destIDs = new Vector();
+
preSQLCommands = new Vector();
postSQLCommands = new Vector();
@@ -1269,6 +1284,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 +1316,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 +1326,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 +1351,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 +1545,7 @@ class Convert
*/
public static class DataBase
{
+
DBBean bean;
Vector creates;
@@ -1533,6 +1557,7 @@ class Convert
Vector tables = new Vector();
Vector ids;
+ Vector destIDs;
String delimiter = "//";
@@ -1599,7 +1624,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 +1904,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 +1929,6 @@ class Convert
/**
* synchronize method based on delete method code
- *
* @param source
* @param destination
* @param names
@@ -1911,12 +1937,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 +1975,7 @@ class Convert
java.util.TreeSet myIdsDest = new TreeSet();
int deltaID = 1;
String idField = "";
+ String destIDField = "";
String destTableName = "";
try
@@ -1967,7 +1996,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 +2036,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 +2053,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 +2066,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 +2100,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 +2130,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 +2149,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 +2215,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 +2263,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 +2276,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 +2306,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)
{