Revision 9835 trunk/libraries/libGDBMS/src/main/java/com/hardcode/gdbms/driver/mysql/MySQLWriter.java
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