Revision 20058 trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/db/jdbc/h2/H2Utils.java
H2Utils.java | ||
---|---|---|
27 | 27 |
import com.vividsolutions.jts.io.WKBWriter; |
28 | 28 |
|
29 | 29 |
public class H2Utils { |
30 |
private static WKBParser2 wkbParser = new WKBParser2(); |
|
31 | 30 |
|
32 |
static String getFilterForID(DBFeatureType fType, IFeature feature){ |
|
33 |
return getFilterForID(fType, getPkFromFeature(feature,fType)); |
|
34 |
} |
|
35 | 31 |
|
36 |
static String getFilterForID(DBFeatureType fType, Object[] featureKey){ |
|
37 |
//TODO: Ojo para los multiples |
|
38 |
if (fType.getFieldsId().length != 1) |
|
39 |
throw new UnsupportedOperationException("ID fields > 1"); |
|
40 |
String id =fType.getFieldsId()[0]; |
|
41 |
return id + " = " + objectToSqlString(featureKey[0]); |
|
42 |
} |
|
43 | 32 |
|
44 | 33 |
static String getDefaultSchema(Connection conn, String catalog) throws InitializeException { |
45 | 34 |
String sql= "SELECT * FROM INFORMATION_SCHEMA.SCHEMATA WHERE IS_DEFAULT = TRUE"; |
... | ... | |
78 | 67 |
|
79 | 68 |
} |
80 | 69 |
return schema; |
81 |
|
|
82 | 70 |
} |
83 | 71 |
|
84 | 72 |
private static void loadFieldsToFeatureType(Connection conn,H2StoreParameters params,DBFeatureType featureType) throws ReadException{ |
... | ... | |
187 | 175 |
JDBCAttributeDescriptor column= new JDBCAttributeDescriptor(); |
188 | 176 |
try { |
189 | 177 |
column.setName(rsMetadata.getColumnName(colIndex)); |
178 |
column.setCaseSensitive(rsMetadata.isCaseSensitive(colIndex)); |
|
190 | 179 |
column.setSqlType(rsMetadata.getColumnType(colIndex)); |
191 |
switch (rsMetadata.getColumnType(colIndex)) { |
|
180 |
column.setAllowNull(rsMetadata.isNullable(colIndex) == ResultSetMetaData.columnNullable); |
|
181 |
column.setAutoIncrement(rsMetadata.isAutoIncrement(colIndex)); |
|
182 |
column.setReadOnly(rsMetadata.isReadOnly(colIndex)); |
|
183 |
column.setWritable(rsMetadata.isWritable(colIndex)); |
|
184 |
column.setClassName(rsMetadata.getColumnClassName(colIndex)); |
|
185 |
column.setCatalogName(rsMetadata.getCatalogName(colIndex)); |
|
186 |
column.setDefinitelyWritable(rsMetadata.isDefinitelyWritable(colIndex)); |
|
187 |
column.setLabel(rsMetadata.getColumnLabel(colIndex)); |
|
188 |
column.setSchemaName(rsMetadata.getSchemaName(colIndex)); |
|
189 |
column.setTableName(rsMetadata.getTableName(colIndex)); |
|
190 |
column.setCatalogName(rsMetadata.getCatalogName(colIndex)); |
|
191 |
column.setSqlTypeName(rsMetadata.getColumnTypeName(colIndex)); |
|
192 |
column.setSearchable(rsMetadata.isSearchable(colIndex)); |
|
193 |
column.setSigned(rsMetadata.isSigned(colIndex)); |
|
194 |
column.setCurrency(rsMetadata.isCurrency(colIndex)); |
|
195 |
column.setPrecision(rsMetadata.getPrecision(colIndex)); |
|
196 |
column.setSize(rsMetadata.getColumnDisplaySize(colIndex)); switch (rsMetadata.getColumnType(colIndex)) { |
|
192 | 197 |
case java.sql.Types.INTEGER: |
193 | 198 |
column.setType(IFeatureAttributeDescriptor.TYPE_INT); |
194 | 199 |
break; |
... | ... | |
197 | 202 |
break; |
198 | 203 |
case java.sql.Types.REAL: |
199 | 204 |
column.setType(IFeatureAttributeDescriptor.TYPE_DOUBLE); |
200 |
// column.setPrecision(rsMetadata.getInt("DECIMAL_DIGITS")); |
|
201 | 205 |
break; |
202 | 206 |
case java.sql.Types.DOUBLE: |
203 | 207 |
column.setType(IFeatureAttributeDescriptor.TYPE_DOUBLE); |
204 |
// column.setPrecision(rsMetadata.getInt("DECIMAL_DIGITS")); |
|
205 | 208 |
break; |
206 | 209 |
case java.sql.Types.CHAR: |
207 | 210 |
column.setType(IFeatureAttributeDescriptor.TYPE_STRING); |
208 |
column.setSize(rsMetadata.getColumnDisplaySize(colIndex)); |
|
209 | 211 |
break; |
210 | 212 |
case java.sql.Types.VARCHAR: |
211 | 213 |
column.setType(IFeatureAttributeDescriptor.TYPE_STRING); |
212 |
column.setSize(rsMetadata.getColumnDisplaySize(colIndex)); |
|
213 | 214 |
break; |
214 | 215 |
case java.sql.Types.FLOAT: |
215 | 216 |
column.setType(IFeatureAttributeDescriptor.TYPE_FLOAT); |
216 |
column.setSize(rsMetadata.getColumnDisplaySize(colIndex)); |
|
217 | 217 |
break; |
218 | 218 |
case java.sql.Types.DECIMAL: |
219 | 219 |
column.setType(IFeatureAttributeDescriptor.TYPE_FLOAT); |
220 |
column.setSize(rsMetadata.getColumnDisplaySize(colIndex)); |
|
221 |
// column.setPrecision(rsMetadata.getInt("DECIMAL_DIGITS")); |
|
222 | 220 |
break; |
223 | 221 |
case java.sql.Types.DATE: |
224 | 222 |
column.setType(IFeatureAttributeDescriptor.TYPE_DATE); |
... | ... | |
396 | 394 |
return conn; |
397 | 395 |
} |
398 | 396 |
|
399 |
static Object[] getPkFromResulset(ResultSet rs, DBFeatureType featureType) throws java.sql.SQLException{ |
|
400 |
String[] fieldsId = featureType.getFieldsId(); |
|
401 |
Object[] result = new Object[fieldsId.length]; |
|
402 |
for (int i=0;i<fieldsId.length;i++){ |
|
403 |
result[i] = rs.getObject(fieldsId[i]); |
|
404 |
} |
|
405 |
return result; |
|
406 | 397 |
|
407 |
} |
|
408 |
|
|
409 |
static Object[] getPkFromFeature(IFeature feature, DBFeatureType featureType){ |
|
410 |
String[] fieldsId = featureType.getFieldsId(); |
|
411 |
Object[] result = new Object[fieldsId.length]; |
|
412 |
for (int i=0;i<fieldsId.length;i++){ |
|
413 |
result[i] = feature.get(fieldsId[i]); |
|
414 |
} |
|
415 |
return result; |
|
416 |
|
|
417 |
} |
|
418 |
|
|
419 |
static IFeature createFeature(JDBCStore store,ResultSet rs,IFeatureType featureType) throws ReadException{ |
|
420 |
|
|
421 |
JDBCFeature feature=null; |
|
422 |
|
|
423 |
if (featureType == null){ |
|
424 |
featureType = store.getDefaultFeatureType(); |
|
425 |
} |
|
426 |
|
|
427 |
|
|
428 |
Object[] pk; |
|
429 |
try { |
|
430 |
pk = getPkFromResulset(rs, (DBFeatureType) store.getDefaultFeatureType()); |
|
431 |
|
|
432 |
feature=new H2Feature(featureType,store,pk); |
|
433 |
|
|
434 |
Iterator iter = featureType.iterator(); |
|
435 |
IGeometry geom = null; |
|
436 |
while (iter.hasNext()) { |
|
437 |
IFeatureAttributeDescriptor fad=(IFeatureAttributeDescriptor)iter.next(); |
|
438 |
if (fad.getDataType().equals(IFeatureAttributeDescriptor.TYPE_GEOMETRY)) { |
|
439 |
byte[] data = rs.getBytes(fad.getName()); |
|
440 |
|
|
441 |
if (data == null) { |
|
442 |
geom = null; |
|
443 |
} else{ |
|
444 |
geom = wkbParser.parse(data); |
|
445 |
} |
|
446 |
// feature.setDefaultGeometry(geom); |
|
447 |
feature.setGeometry(fad.getName(),geom); |
|
448 |
} else { |
|
449 |
feature.set(fad.getName(), rs.getObject(fad.getName())); |
|
450 |
} |
|
451 |
|
|
452 |
} |
|
453 |
return feature; |
|
454 |
} catch (java.sql.SQLException e) { |
|
455 |
throw new ReadException("CreateFeature",e); |
|
456 |
} |
|
457 |
} |
|
458 |
|
|
459 |
static String objectToSqlString(Object obj){ |
|
460 |
if (obj instanceof String){ |
|
461 |
return "'"+ scapeString((String)obj) +"'"; |
|
462 |
} else if (obj == null){ |
|
463 |
return "null"; |
|
464 |
}else{ |
|
465 |
// OJO con otros tipos!! |
|
466 |
return obj.toString(); |
|
467 |
} |
|
468 |
|
|
469 |
} |
|
470 |
|
|
471 |
static String scapeString(String str){ |
|
472 |
return str.replace("'", "''"); |
|
473 |
} |
|
474 |
|
|
475 | 398 |
} |
Also available in: Unified diff