Revision 9835 trunk/libraries/libGDBMS/src/main/java/com/hardcode/gdbms/driver/mysql/MySQLWriter.java

View differences:

MySQLWriter.java
10 10
import java.sql.Statement;
11 11
import java.sql.Types;
12 12

  
13

  
13
import com.hardcode.gdbms.engine.data.InnerDBUtils;
14
import com.hardcode.gdbms.engine.data.db.DBDataSourceAdapter;
15
import com.hardcode.gdbms.engine.data.db.DBDataWare;
16
import com.hardcode.gdbms.engine.data.db.DBTableSourceInfo;
17
import com.hardcode.gdbms.engine.data.driver.DriverException;
18
import com.hardcode.gdbms.engine.values.Value;
19
import com.hardcode.gdbms.engine.values.ValueCollection;
20
import com.hardcode.gdbms.engine.values.ValueFactory;
21
import com.hardcode.gdbms.engine.values.ValueWriter;
14 22
import com.iver.cit.gvsig.fmap.core.IRow;
15 23
import com.iver.cit.gvsig.fmap.drivers.DBLayerDefinition;
16 24
import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
......
35 43
	private Statement st;
36 44
	private ResultSetMetaData metaData;
37 45
	private boolean bCreateTable;
38
	private boolean bWriteAll;
39 46
	private MySQL mySql = new MySQL();
40 47
	private JdbcFieldManager fieldManager;
48
	private DBDataWare directDataWare;
41 49
	
42 50
	public void initialize(Connection conn){
43 51
		this.conn = conn;
44 52
	}
45 53
	
54
	/* (non-Javadoc)
55
	 * @see com.iver.cit.gvsig.fmap.edition.IWriter#initialize(com.iver.cit.gvsig.fmap.drivers.ITableDefinition)
56
	 */
46 57
	public void initialize(ITableDefinition tableDefinition) throws EditionException {
47 58
		super.initialize(tableDefinition);
48 59
		try {
......
111 122
		return fieldManager.alterTable();
112 123
	}
113 124
	
125
    private ValueCollection getPKValue(Value[] rec) throws DriverException {
126
        int[] fieldsId = directDataWare.getPrimaryKeys();
127
        Value[] pks = new Value[fieldsId.length];
128

  
129
        for (int i = 0; i < pks.length; i++) {
130
            pks[i] = rec[fieldsId[i]];
131
        }
132

  
133
        return ValueFactory.createValue(pks);
134
    }
135

  
136
	
114 137
	public void process(IRowEdited row) throws EditionException {
115
		String sqlInsert;
138
//		String sqlInsert;
116 139
		try {
117 140
			switch (row.getStatus()) {
118 141
			case IRowEdited.STATUS_ADDED:
119 142
				IRow record =  row.getLinkedRow();
120
				sqlInsert = mySql.getSqlInsertFeature((DBLayerDefinition) tableDef, record);
121
				st.execute(sqlInsert);
143
				directDataWare.insertFilledRow(record.getAttributes());
144
//				sqlInsert = mySql.getSqlInsertFeature((DBLayerDefinition) tableDef, record);
145
//				st.execute(sqlInsert);
122 146
				break;
123 147
				
124 148
			case IRowEdited.STATUS_MODIFIED:
125 149
				IRow featM =  row.getLinkedRow();
126 150
				if (bWriteAll) {
127
					sqlInsert = mySql.getSqlInsertFeature((DBLayerDefinition) tableDef, featM);
128
					System.out.println("sql = " + sqlInsert);
129
					st.execute(sqlInsert);
151
					directDataWare.insertFilledRow(featM.getAttributes());
152
//					sqlInsert = mySql.getSqlInsertFeature((DBLayerDefinition) tableDef, featM);
153
//					System.out.println("sql = " + sqlInsert);
154
//					st.execute(sqlInsert);
130 155
				} else {
131
					String sqlModify = mySql.getSqlModifyFeature((DBLayerDefinition) tableDef, featM);
132
					st.execute(sqlModify);
156
	    			Value[] rec =row.getAttributes();
157
    				String sql = InnerDBUtils.createUpdateStatement(((DBTableSourceInfo) directDataWare.getSourceInfo()).tableName,
158
	    						getPKValue(rec).getValues(), directDataWare.getPKNames(),
159
				                directDataWare.getFieldNames(), featM.getAttributes(), ((ValueWriter)directDataWare.getDriver()));
160

  
161
    				st.execute(sql);
162
//					String sqlModify = mySql.getSqlModifyFeature((DBLayerDefinition) tableDef, featM);
163
//					st.execute(sqlModify);
133 164
				}
134 165
				break;
135 166
				
136 167
			case IRowEdited.STATUS_ORIGINAL:
137 168
				IRow featO = row.getLinkedRow();
138 169
				if (bWriteAll) {
139
					sqlInsert = mySql.getSqlInsertFeature((DBLayerDefinition) tableDef, featO);
140
					st.execute(sqlInsert);
170
					directDataWare.insertFilledRow(featO.getAttributes());
171
//					sqlInsert = mySql.getSqlInsertFeature((DBLayerDefinition) tableDef, featO);
172
//					st.execute(sqlInsert);
141 173
				}
142 174
				break;
143 175
				
144 176
			case IRowEdited.STATUS_DELETED:
145
				String sqlDelete = mySql.getSqlDeleteFeature((DBLayerDefinition) tableDef, row);
177
    			Value[] rec =row.getAttributes();
178
				String sqlDelete = InnerDBUtils.createDeleteStatement(
179
						getPKValue(rec).getValues(), 
180
    					directDataWare.getPKNames(),
181
    					((DBTableSourceInfo) directDataWare.getSourceInfo()).tableName,
182
    					((ValueWriter)directDataWare.getDriver()));
183

  
184
				st.execute(sqlDelete);
185
				
186
//				String sqlDelete = mySql.getSqlDeleteFeature((DBLayerDefinition) tableDef, row);
146 187
				System.out.println("sql = " + sqlDelete);
147 188
				st.execute(sqlDelete);
148 189
				break;
......
151 192
		} catch (SQLException e) {
152 193
			e.printStackTrace();
153 194
			throw new EditionException(e);
195
		} catch (DriverException e) {
196
			e.printStackTrace();
197
			throw new EditionException(e);
154 198
		}
155 199
	}
156 200

  
......
226 270
		fieldManager.renameField(antName, newName);	
227 271
	}
228 272

  
273
	public DBDataWare getDirectDataWare() {
274
		return directDataWare;
275
	}
276

  
277
	public void setDirectDataWare(DBDataWare directDataWare) {
278
		this.directDataWare = directDataWare;
279
	}
280

  
229 281
}

Also available in: Unified diff