001: /*
002: * SqlRowDataConverterTest.java
003: *
004: * This file is part of SQL Workbench/J, http://www.sql-workbench.net
005: *
006: * Copyright 2002-2008, Thomas Kellerer
007: * No part of this code maybe reused without the permission of the author
008: *
009: * To contact the author please send an email to: support@sql-workbench.net
010: *
011: */
012: package workbench.db.exporter;
013:
014: import java.sql.Types;
015: import java.util.ArrayList;
016: import java.util.Calendar;
017: import java.util.List;
018: import junit.framework.TestCase;
019: import workbench.TestUtil;
020: import workbench.db.TableIdentifier;
021: import workbench.db.exporter.SqlRowDataConverter;
022: import workbench.sql.ScriptParser;
023: import workbench.storage.ResultInfo;
024: import workbench.storage.RowData;
025: import workbench.storage.SqlLiteralFormatter;
026: import workbench.storage.SqlLiteralFormatter;
027: import workbench.util.SqlUtil;
028:
029: /**
030: *
031: * @author support@sql-workbench.net
032: */
033: public class SqlRowDataConverterTest extends TestCase {
034:
035: public SqlRowDataConverterTest(String testName) {
036: super (testName);
037: }
038:
039: public void testConvert() {
040: try {
041: TestUtil util = new TestUtil("testDateLiterals");
042: util.prepareEnvironment();
043:
044: String[] cols = new String[] { "char_col", "int_col",
045: "date_col", "ts_col" };
046: int[] types = new int[] { Types.VARCHAR, Types.INTEGER,
047: Types.DATE, Types.TIMESTAMP };
048: int[] sizes = new int[] { 10, 10, 10, 10 };
049:
050: ResultInfo info = new ResultInfo(cols, types, sizes);
051: TableIdentifier tbl = new TableIdentifier("MYTABLE");
052: info.setUpdateTable(tbl);
053:
054: SqlRowDataConverter converter = new SqlRowDataConverter(
055: null);
056: converter.setResultInfo(info);
057:
058: info.getColumn(0).setIsPkColumn(true);
059:
060: RowData data = new RowData(info);
061: data.setValue(0, "data1");
062: data.setValue(1, new Integer(42));
063: Calendar c = Calendar.getInstance();
064: c.set(2006, 9, 26, 17, 0);
065: c.set(Calendar.SECOND, 0);
066: c.set(Calendar.MILLISECOND, 0);
067: java.util.Date d = c.getTime();
068: data.setValue(2, c.getTime());
069: java.sql.Timestamp ts = new java.sql.Timestamp(d.getTime());
070: data.setValue(3, ts);
071: data.resetStatus();
072:
073: converter
074: .setSqlLiteralType(SqlLiteralFormatter.JDBC_DATE_LITERAL_TYPE);
075: converter.setCreateInsert();
076: String line = converter.convertRowData(data, 0).toString()
077: .trim();
078: String verb = SqlUtil.getSqlVerb(line);
079: assertEquals("No insert generated", "INSERT", verb);
080:
081: assertEquals("JDBC date literal not found", true, line
082: .indexOf("{d '2006-10-26'}") > -1);
083: assertEquals("JDBC timestamp literal not found", true, line
084: .indexOf("{ts '2006-10-26 ") > -1);
085:
086: converter
087: .setSqlLiteralType(SqlLiteralFormatter.ANSI_DATE_LITERAL_TYPE);
088: line = converter.convertRowData(data, 0).toString().trim();
089: assertEquals("ANSI date literal not found", true, line
090: .indexOf("DATE '2006-10-26'") > -1);
091: assertEquals("ANSI timestamp literal not found", true, line
092: .indexOf("TIMESTAMP '2006-10-26") > -1);
093:
094: converter.setCreateUpdate();
095: line = converter.convertRowData(data, 0).toString().trim();
096:
097: verb = SqlUtil.getSqlVerb(line.toString());
098: assertEquals("No UPDATE generated", "UPDATE", verb);
099: assertEquals("Wrong WHERE statement", true, line
100: .endsWith("WHERE char_col = 'data1';"));
101:
102: List columns = new ArrayList();
103: columns.add(info.getColumn(0));
104: columns.add(info.getColumn(1));
105: converter.setColumnsToExport(columns);
106: line = converter.convertRowData(data, 0).toString().trim();
107: assertEquals("date_col included", -1, line
108: .indexOf("date_col ="));
109: assertEquals("ts_col included", -1, line
110: .indexOf("ts_col ="));
111: assertEquals("int_col not updated", true, line
112: .indexOf("SET int_col = 42") > -1);
113:
114: converter.setCreateInsertDelete();
115: line = converter.convertRowData(data, 0).toString().trim();
116: ScriptParser p = new ScriptParser(line);
117: int count = p.getSize();
118: assertEquals("Not enough statements generated", 2, count);
119: String sql = p.getCommand(0);
120: verb = SqlUtil.getSqlVerb(sql);
121: assertEquals("DELETE not first statement", "DELETE", verb);
122:
123: sql = p.getCommand(1);
124: verb = SqlUtil.getSqlVerb(sql);
125: assertEquals("INSERT not second statement", "INSERT", verb);
126: } catch (Exception e) {
127: e.printStackTrace();
128: fail(e.getMessage());
129: }
130: }
131: }
|