Revision 20058 trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/db/jdbc/h2/H2Utils.java

View differences:

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