--- FM2SQL/src/Convert.java 2005/04/12 11:02:51 1.9
+++ FM2SQL/src/Convert.java 2005/05/02 12:45:36 1.13
@@ -29,13 +29,13 @@ 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.Enumeration;
+import java.util.Date;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
-import java.util.Properties;
import java.util.StringTokenizer;
import java.util.TreeSet;
import java.util.Vector;
@@ -49,6 +49,8 @@ import com.exploringxml.xml.Xparse;
class Convert
{
+ private static final String _TEMP = "_temp";
+
/**
* Helper class for index creation
*
@@ -135,10 +137,16 @@ class Convert
static Vector postSQLCommands = new Vector();
- static final String versionID = new String("FM2SQL Version 0.9.0b\n");
+ static final String versionID = new String("FM2SQL Version 0.9.6b\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
@@ -158,7 +166,7 @@ class Convert
File temp = null;
try
{
- temp = new File(tmpPath, "fm2sql.txt");
+ temp = new File(tmpPath, "fm2sql.txt");
int count = 1;
while (temp.exists())
{
@@ -172,8 +180,8 @@ class Convert
PrintStream stream = new PrintStream(file, true);
// write info for user to stdout
System.out.println(versionID);
- System.out.println("Loading "+args[0]+"....");
- System.out.println("Log will be written to "+temp.getCanonicalPath());
+ System.out.println("Loading " + args[0] + "....");
+ System.out.println("Log will be written to " + temp.getCanonicalPath());
if (!debug)
{
@@ -181,8 +189,8 @@ class Convert
System.setErr(stream);
}
System.out.println(versionID);
- System.out.println("Using config file : "+args[0]+"....");
-
+ System.out.println("Using config file : " + args[0] + "....");
+
StringBuffer sb = readXMLFile(args[0]);
parseXMLConfig(sb);
if (!(new File(args[0]).exists()))
@@ -264,8 +272,9 @@ class Convert
String layout = (layouts.isEmpty()) ? "" : layouts.get(tbIndex).toString();
query = (selects != null) ? selects.get(tbIndex).toString() : query;
// if vectors[1].get(i) != null)
- if (layout != "")
+ if (!layout.equals(""))
{
+
query = addLayoutToQuery(names, query, tbIndex, layout);
}
@@ -488,7 +497,7 @@ class Convert
String layout = (layouts.isEmpty()) ? "" : layouts.get(tbIndex).toString();
query = (selects != null) ? selects.get(tbIndex).toString() : "select * from "
+ bean.getQC() + names.get(tbIndex).toString() + bean.getQC();
- if (layout != "")
+ if (layout.intern() != "")
{
query = addLayoutToQuery(names, query, tbIndex, layout);
@@ -530,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)
@@ -606,7 +615,6 @@ class Convert
command.append(") ");
command.append(" values ( ");
-
// add a question marks for every field
for (int i = 0; i < bean.getColumnNames().size() - 1; ++i)
command.append("?,");
@@ -703,6 +711,7 @@ class Convert
long startTime = System.currentTimeMillis();
bean.makeQuery(query, 0);
+ System.err.println("query for whole table done");
command = writeDatainDestTable(dialog, command, j, pstm, rowCount, delimiter);
long endTime = System.currentTimeMillis();
System.out.println("Time for old convert elapsed " + (endTime - startTime));
@@ -710,10 +719,31 @@ 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)
{
- System.out.println("Error while connecting to database " + e);
+ System.out.println("Error while connecting to database " + e.getMessage());
+ noError = false;
if (isGUI)
{
showExceptionDialog(dialog, command, e);
@@ -723,11 +753,28 @@ class Convert
e.printStackTrace();
}
+ } catch (Error e)
+ {
+ noError = false;
+
+ System.out.println(e);
+ e.printStackTrace();
}
}
/**
+ *
+ * @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
@@ -1033,8 +1080,25 @@ class Convert
sqlCommand.executeCommand();
}
int mode = db.mode;
- if (mode == DataBase.CONVERT_MODE || mode == DataBase.APPEND_MODE
- || mode == DataBase.CONVERT_TEMP_MODE)
+ if (mode == DataBase.CONVERT_TEMP_MODE)
+ {
+ convertBatch(db.bean, database, db.tables, db.layouts, db.selects, db.creates, db.ids,
+ mode, db.delimiter);
+ if (noError)
+ {
+ System.out.println("no Error occured ");
+ // db.bean.setURL(database.url);
+ // db.bean.setUserAndPasswd(database.user,database.passwd);
+ //
+ // Convert.user = db.bean.user;
+ // Convert.passwd = db.bean.passwd;
+ // userDest = database.user;
+ // 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()));
+ }
+ }
+ if (mode == DataBase.CONVERT_MODE || mode == DataBase.APPEND_MODE)
convertBatch(db.bean, database, db.tables, db.layouts, db.selects, db.creates, db.ids,
mode, db.delimiter);
else if (mode == DataBase.UPDATE_MODE)
@@ -1082,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)
{
@@ -1232,9 +1311,9 @@ class Convert
id = "";
if (name.equals(""))
throw new Error("parse error table tag attribute must not be empty");
- tables.add(name);
- layouts.add(layout);
- ids.add(id);
+ tables.add(name.intern());
+ layouts.add(layout.intern());
+ ids.add(id.intern());
String query = (node5 == null) ? "" : node5.getCharacters();
if (query.equals(""))
System.err.println("Warning empty select tag or select tag missing !!");
@@ -1521,7 +1600,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";
@@ -3729,7 +3810,7 @@ class Convert
// retrieve field_names from select statement
if (query.indexOf("*") < 0)
{
- int selectEndIndex = query.indexOf("from");
+ int selectEndIndex = query.lastIndexOf("from");
StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ",");
int numFields = tokenizer.countTokens();
fieldNames = new String[numFields];
@@ -3737,7 +3818,11 @@ class Convert
while (tokenizer.hasMoreTokens())
{
String fieldName = tokenizer.nextToken().trim();
- fieldNames[fieldIndex] = beanDest.getQC() + convertText(fieldName) + beanDest.getQC();
+ String text = convertText(fieldName);
+ if (text.indexOf("\"") >= 0)
+ fieldNames[fieldIndex] = convertText(fieldName);
+ else
+ fieldNames[fieldIndex] = beanDest.getQC() + convertText(fieldName) + beanDest.getQC();
// System.out.println("field "+ fieldNames[fieldIndex]);
fieldIndex++;
}