--- FM2SQL/src/Convert.java 2005/04/19 10:49:05 1.10
+++ FM2SQL/src/Convert.java 2005/09/06 10:53:16 1.14
@@ -29,8 +29,10 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
+import java.text.DateFormat;
import java.text.ParseException;
import java.util.ArrayList;
+import java.util.Date;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
@@ -47,6 +49,8 @@ import com.exploringxml.xml.Xparse;
class Convert
{
+ private static final String _TEMP = "_temp";
+
/**
* Helper class for index creation
*
@@ -119,7 +123,7 @@ class Convert
final static int numIntervalls = 4;
- static boolean debug = !false;
+ static boolean debug = false;
static boolean isGUI = true;
@@ -133,12 +137,16 @@ class Convert
static Vector postSQLCommands = new Vector();
- static final String versionID = new String("FM2SQL Version 0.9.1b\n");
+ static final String versionID = new String("FM2SQL Version 0.9.8b\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(':', '_')));
+
/*
* try { //byte[] b = "�".getBytes("UTF-8"); //
* System.out.println("QueryString " +b[0]+" "+b[1]+(new
@@ -266,7 +274,7 @@ class Convert
// if vectors[1].get(i) != null)
if (!layout.equals(""))
{
-
+
query = addLayoutToQuery(names, query, tbIndex, layout);
}
@@ -531,7 +539,7 @@ class Convert
destTableName = prop.destTableName;
if (mode == Convert.DataBase.CONVERT_TEMP_MODE)
{
- destTableName += "_temp";
+ destTableName += _TEMP;
}
fieldNames = prop.fieldNames;
if (mode == Convert.DataBase.CONVERT_MODE || mode == Convert.DataBase.CONVERT_TEMP_MODE)
@@ -648,7 +656,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
@@ -674,7 +682,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
@@ -689,7 +697,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() + "'";
@@ -712,6 +720,25 @@ class Convert
if (isGUI)
resetGUI(dialog);
noError = true;
+ if (mode == Convert.DataBase.CONVERT_TEMP_MODE)
+ {
+ String originalName = destTableName.split(_TEMP)[0];
+ // TODO
+ if (beanDest.getTableNames().contains(originalName))
+ {
+ DateFormat d = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM);
+ d.setTimeZone(java.util.TimeZone.getTimeZone("CET"));
+
+ String date = d.format(new Date());
+ date = date.replace(':', '_');
+ 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));
+ }
}
} catch (Exception e)
{
@@ -728,6 +755,8 @@ class Convert
}
} catch (Error e)
{
+ noError = false;
+
System.out.println(e);
e.printStackTrace();
}
@@ -735,6 +764,17 @@ class Convert
}
/**
+ *
+ * @param beanDest2
+ * @param originalName
+ * @return
+ */
+ private static String addQuotes(DBBean bean, String originalName)
+ {
+ return bean.getQC() + originalName + bean.getQC();
+ }
+
+ /**
* @param names
* @param dialog
* @param tbIndex
@@ -1079,7 +1119,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();)
{
@@ -1106,6 +1146,21 @@ class Convert
}
}
+ /**
+ *
+ * @param database
+ * @param db
+ * @throws Exception
+ * @throws SQLException
+ */
+ private static void renameTable(DBBean database, String sourceTable, String destTable)
+ throws SQLException, Exception
+ {
+ String command = "alter table " + sourceTable + " rename " + " to " + destTable;
+ SQLCommand sqlCommand = new SQLCommand(database, command);
+ sqlCommand.executeCommand();
+ }
+
public static Vector getXMLConfig(StringBuffer sb)
{
@@ -1121,6 +1176,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();
@@ -1143,6 +1200,8 @@ class Convert
selects = new Vector();
creates = new Vector();
ids = new Vector();
+ destIDs = new Vector();
+
preSQLCommands = new Vector();
postSQLCommands = new Vector();
@@ -1246,7 +1305,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");
@@ -1254,11 +1315,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 !!");
@@ -1275,6 +1340,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();
@@ -1468,6 +1534,7 @@ class Convert
*/
public static class DataBase
{
+
DBBean bean;
Vector creates;
@@ -1479,6 +1546,7 @@ class Convert
Vector tables = new Vector();
Vector ids;
+ Vector destIDs;
String delimiter = "//";
@@ -1545,7 +1613,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";
@@ -1823,7 +1893,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() + "'";
@@ -1848,7 +1918,6 @@ class Convert
/**
* synchronize method based on delete method code
- *
* @param source
* @param destination
* @param names
@@ -1857,12 +1926,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!!!");
@@ -1893,6 +1964,7 @@ class Convert
java.util.TreeSet myIdsDest = new TreeSet();
int deltaID = 1;
String idField = "";
+ String destIDField = "";
String destTableName = "";
try
@@ -1913,7 +1985,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);
@@ -1953,7 +2025,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();
@@ -1970,7 +2042,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());
@@ -1983,7 +2055,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);
@@ -2017,7 +2089,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
@@ -2047,7 +2119,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
@@ -2066,7 +2138,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() + "'";
@@ -2193,7 +2265,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)