--- FM2SQL/Attic/Convert.java 2004/07/27 10:41:36 1.63 +++ FM2SQL/Attic/Convert.java 2004/07/28 11:21:01 1.64 @@ -571,81 +571,10 @@ class Convert // System.exit(0); // determine destTableName from createStatement or from source table name - if (!creates.get(tbIndex).equals("")) - { - String create = creates.get(tbIndex).toString().toLowerCase(); - int fromIndex = create.indexOf("table") + 5; - int toIndex = create.indexOf("("); - int endIndex = create.indexOf(")", toIndex); - - destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim(); - System.out.println("destTable " + destTableName); - // retrieve field_names from select statement - if (query.indexOf("*") < 0) - { - int selectEndIndex = query.indexOf("from"); - StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ","); - int numFields = tokenizer.countTokens(); - fieldNames = new String[numFields]; - int fieldIndex = 0; - while (tokenizer.hasMoreTokens()) - { - String fieldName = tokenizer.nextToken().trim(); - fieldNames[fieldIndex] = convertText(fieldName); - System.out.println(fieldNames[fieldIndex]); - fieldIndex++; - } - - } else - { - // use create statement for field names - StringTokenizer tokenizer = new StringTokenizer(create.substring(toIndex + 1, endIndex), ","); - int numFields = tokenizer.countTokens(); - fieldNames = new String[numFields]; - int fieldIndex = 0; - while (tokenizer.hasMoreTokens()) - { - String fieldName = tokenizer.nextToken().trim(); - int index = fieldName.lastIndexOf(" "); - fieldNames[fieldIndex] = fieldName.substring(0, index); - System.out.println(fieldNames[fieldIndex]); - fieldIndex++; - } - } - } else - { - destTableName = convertText(names.get(tbIndex).toString()); - - // retrieve field_names from select statement - if (query.indexOf("*") < 0) - { - int selectEndIndex = query.indexOf("from"); - StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ","); - int numFields = tokenizer.countTokens(); - fieldNames = new String[numFields]; - int fieldIndex = 0; - while (tokenizer.hasMoreTokens()) - { - String fieldName = tokenizer.nextToken().trim(); - fieldNames[fieldIndex] = convertText(fieldName); - // System.out.println("field "+ fieldNames[fieldIndex]); - fieldIndex++; - } - - } else - { - Vector fieldNamesVec = bean.getColumnNames(); - fieldNames = new String[fieldNamesVec.size()]; - int fieldIndex = -1; - for (Iterator iter = fieldNamesVec.iterator(); iter.hasNext();) - { - String element = (String) iter.next(); - fieldNames[++fieldIndex] = bean.getQC() + convertText(element) + bean.getQC(); - // System.out.println("field " + fieldNames[fieldIndex]); - } - } - } - if (mode == Convert.DataBase.CONVERT_MODE) + ConversionProperties prop= getFieldNamesAndDestTableName(creates.get(tbIndex).toString(),query,names.get(tbIndex).toString()); + destTableName = prop.destTableName; + fieldNames = prop.fieldNames; + if (mode == Convert.DataBase.CONVERT_MODE) { if (tables.indexOf(destTableName) >= 0) @@ -1604,7 +1533,28 @@ class Convert e.printStackTrace(); } } - + /** + * Helper class for Conversion etc + * Holds the some data + * @author rogo + * + */ + + public static class ConversionProperties + { + String destTableName; + String[] fieldNames ; + public ConversionProperties() + { + } + public ConversionProperties(String destTableName, String[] fieldNames) + { + this.destTableName = destTableName; + this.fieldNames = fieldNames; + + } + + } /** * Helper class for XML-File parsing * Holds the parsed data @@ -2064,14 +2014,14 @@ class Convert Vector deleted = new Vector(vec); Vector linesToDelete = new Vector(vecDest); - Vector linesToAppend = new Vector(vec); + TreeSet linesToAppend = new TreeSet(vec); // remove all lines that are already in dest database linesToAppend.removeAll(vecDest); // remove all lines that should not be deleted linesToDelete.removeAll(deleted); System.out.println("linesToAppend "+linesToAppend+" "+vecDest+" "+destTableName); System.out.println("linesToDelete "+linesToDelete+" "+vecDest+" "+destTableName); - // prepare new query for next chunk + // prepare new query for next chunk if (query.indexOf("where") > 0) tempQuery = query + " and " + tempID + ">='" + vec.firstElement() + "' and "+tempID + "<='" + vec.lastElement() + "' order by "+tempID; else @@ -2079,13 +2029,20 @@ class Convert System.out.println("tempQuery is now "+tempQuery+" order by "+tempID); // bean.makeQuery(tempQuery,vec.size()); Vector[] vectors=bean.getQueryData(tempQuery,vec.size()); - System.out.println(vectors[0]); - System.out.println( bean.getColumnNames().indexOf(idField)); - System.exit(0); + int idIndex = vectors[1].indexOf(idField); + for (Iterator iter = vectors[0].iterator(); iter.hasNext();) + { + Vector line = (Vector) iter.next(); + System.out.println("line "+linesToAppend.contains(line.get(idIndex))); + } + System.out.println( ); // System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIdsDest.size()); /// @TODO complete delete task remove query show lines to be deleted let user choose if he wants that System.out.println("number of lines to be deleted " + linesToDelete.size()); deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls); + System.out.println("deltaID "+deltaID); + System.exit(0); + beanDest.setConnection(destination); Statement stm = beanDest.getConnection().createStatement(); @@ -2676,6 +2633,85 @@ class Convert } return buf.toString(); } + public static ConversionProperties getFieldNamesAndDestTableName(String create,String query,String tableName ) + { + String[] fieldNames = null; + String destTableName = null; + // determine destTableName from createStatement or from source table name + if (!create.equals("")) + { + int fromIndex = create.toLowerCase().indexOf("table") + 5; + int toIndex = create.indexOf("("); + int endIndex = create.indexOf(")", toIndex); + + destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim(); + System.out.println("destTable " + destTableName); + // retrieve field_names from select statement + // TODO problem with different fieldNames in create statement will overwrite them + if (query.indexOf("*") < 0) + { + int selectEndIndex = query.indexOf("from"); + StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ","); + int numFields = tokenizer.countTokens(); + fieldNames = new String[numFields]; + int fieldIndex = 0; + while (tokenizer.hasMoreTokens()) + { + String fieldName = tokenizer.nextToken().trim(); + fieldNames[fieldIndex] = convertText(fieldName); + System.out.println(fieldNames[fieldIndex]); + fieldIndex++; + } + } else + { + // use create statement for field names + StringTokenizer tokenizer = new StringTokenizer(create.substring(toIndex + 1, endIndex), ","); + int numFields = tokenizer.countTokens(); + fieldNames = new String[numFields]; + int fieldIndex = 0; + while (tokenizer.hasMoreTokens()) + { + String fieldName = tokenizer.nextToken().trim(); + int index = fieldName.lastIndexOf(" "); + fieldNames[fieldIndex] = fieldName.substring(0, index); + System.out.println(fieldNames[fieldIndex]); + fieldIndex++; + } + } + } else + { + destTableName = convertText(tableName); + // retrieve field_names from select statement + if (query.indexOf("*") < 0) + { + int selectEndIndex = query.indexOf("from"); + StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ","); + int numFields = tokenizer.countTokens(); + fieldNames = new String[numFields]; + int fieldIndex = 0; + while (tokenizer.hasMoreTokens()) + { + String fieldName = tokenizer.nextToken().trim(); + fieldNames[fieldIndex] = convertText(fieldName); + // System.out.println("field "+ fieldNames[fieldIndex]); + fieldIndex++; + } + + } else + { + Vector fieldNamesVec = bean.getColumnNames(); + fieldNames = new String[fieldNamesVec.size()]; + int fieldIndex = -1; + for (Iterator iter = fieldNamesVec.iterator(); iter.hasNext();) + { + String element = (String) iter.next(); + fieldNames[++fieldIndex] = bean.getQC() + convertText(element) + bean.getQC(); + // System.out.println("field " + fieldNames[fieldIndex]); + } + } + } + return new ConversionProperties(destTableName,fieldNames); + } } \ No newline at end of file