Revision 43655 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.h2/src/main/java/org/gvsig/fmap/dal/store/h2/H2SpatialSQLBuilder.java
H2SpatialSQLBuilder.java | ||
---|---|---|
1 | 1 |
package org.gvsig.fmap.dal.store.h2; |
2 | 2 |
|
3 | 3 |
import java.sql.PreparedStatement; |
4 |
import java.sql.SQLException; |
|
4 | 5 |
import java.text.MessageFormat; |
5 | 6 |
import java.util.ArrayList; |
6 | 7 |
import java.util.Date; |
... | ... | |
148 | 149 |
builder.append(" PRIMARY KEY"); |
149 | 150 |
} |
150 | 151 |
sqls.add(builder.toString()); |
152 |
|
|
151 | 153 |
if( column.isIndexed() ) { |
152 | 154 |
String sql; |
153 | 155 |
String name = "idx_" + this.table().getName() + "_" + column.getName(); |
... | ... | |
168 | 170 |
} |
169 | 171 |
sqls.add(sql); |
170 | 172 |
} |
173 |
|
|
174 |
if( column.isGeometry() ) { |
|
175 |
String sql; |
|
176 |
String constraint_name = "constraint_" + this.table().getName() + "_" + column.getName()+"_dim"; |
|
177 |
sql = MessageFormat.format( |
|
178 |
"ALTER TABLE \"{0}\" ADD CONSTRAINT IF NOT EXISTS \"{1}\" CHECK ST_CoordDim(\"{2}\") = {3}", |
|
179 |
this.table().getName(), |
|
180 |
constraint_name, |
|
181 |
column.getName(), |
|
182 |
sqlgeometrynumdimension(column.getGeometryType(),column.getGeometrySubtype()) |
|
183 |
); |
|
184 |
sqls.add(sql); |
|
185 |
} |
|
171 | 186 |
} |
172 | 187 |
for (ColumnDescriptorBuilderBase column : alters) { |
173 | 188 |
StringBuilder builder = new StringBuilder(); |
... | ... | |
218 | 233 |
} |
219 | 234 |
sqls.add(sql); |
220 | 235 |
} |
236 |
if( column.isGeometry() ) { |
|
237 |
String sql; |
|
238 |
String constraint_name = "constraint_" + this.table().getName() + "_" + column.getName()+"_dim"; |
|
239 |
sql = MessageFormat.format( |
|
240 |
"ALTER TABLE \"{0}\" ADD CONSTRAINT IF NOT EXISTS \"{1}\" CHECK ST_CoordDim(\"{2}\") = {3}", |
|
241 |
this.table().getName(), |
|
242 |
constraint_name, |
|
243 |
column.getName(), |
|
244 |
sqlgeometrynumdimension(column.getGeometryType(),column.getGeometrySubtype()) |
|
245 |
); |
|
246 |
sqls.add(sql); |
|
247 |
} |
|
221 | 248 |
} |
222 | 249 |
for (Pair<String,String> pair : renames) { |
223 | 250 |
StringBuilder builder = new StringBuilder(); |
... | ... | |
314 | 341 |
); |
315 | 342 |
} |
316 | 343 |
sqls.add(sql); |
344 |
|
|
317 | 345 |
} |
346 |
if( column.isGeometry() ) { |
|
347 |
String sql; |
|
348 |
String constraint_name = "constraint_" + this.table().getName() + "_" + column.getName()+"_dim"; |
|
349 |
sql = MessageFormat.format( |
|
350 |
"ALTER TABLE \"{0}\" ADD CONSTRAINT IF NOT EXISTS \"{1}\" CHECK ST_CoordDim(\"{2}\") = {3}", |
|
351 |
this.table().getName(), |
|
352 |
constraint_name, |
|
353 |
column.getName(), |
|
354 |
sqlgeometrynumdimension(column.getGeometryType(),column.getGeometrySubtype()) |
|
355 |
); |
|
356 |
sqls.add(sql); |
|
357 |
} |
|
318 | 358 |
} |
319 | 359 |
|
320 | 360 |
return sqls; |
... | ... | |
459 | 499 |
} |
460 | 500 |
} |
461 | 501 |
|
502 |
public Object sqlgeometrynumdimension(int type, int subtype) { |
|
503 |
int dimensions=2; |
|
504 |
switch(subtype) { |
|
505 |
case Geometry.SUBTYPES.GEOM3D: |
|
506 |
dimensions = 3; |
|
507 |
break; |
|
508 |
case Geometry.SUBTYPES.GEOM2D: |
|
509 |
dimensions = 2; |
|
510 |
break; |
|
511 |
case Geometry.SUBTYPES.GEOM2DM: |
|
512 |
dimensions = 2; // ?????? |
|
513 |
break; |
|
514 |
case Geometry.SUBTYPES.GEOM3DM: |
|
515 |
dimensions = 3; // ?????? |
|
516 |
break; |
|
517 |
} |
|
518 |
return dimensions; |
|
519 |
} |
|
520 |
|
|
462 | 521 |
public H2SpatialHelper getHelper() { |
463 | 522 |
return this.helper; |
464 | 523 |
} |
524 |
public Disposable setStatementParameters( |
|
525 |
PreparedStatement st, |
|
526 |
List values, |
|
527 |
GeometrySupportType geometrySupportType) throws SQLException { |
|
528 |
|
|
529 |
if (values == null) { |
|
530 |
return new Disposable() { |
|
531 |
@Override |
|
532 |
public void dispose() { |
|
533 |
} |
|
534 |
}; |
|
535 |
} |
|
536 |
try { |
|
537 |
byte[] bytes; |
|
538 |
int columnIndex = 1; |
|
539 |
for (Object value : values) { |
|
540 |
if (value instanceof Geometry) { |
|
541 |
bytes = ((Geometry) value).convertToEWKB(); |
|
542 |
st.setBytes(columnIndex, bytes); |
|
543 |
} else { |
|
544 |
st.setObject(columnIndex, value); |
|
545 |
} |
|
546 |
columnIndex++; |
|
547 |
} |
|
548 |
return new Disposable() { |
|
549 |
@Override |
|
550 |
public void dispose() { |
|
551 |
} |
|
552 |
}; |
|
553 |
} catch(Exception ex) { |
|
554 |
throw new SQLException("Can't set values for the prepared statement.", ex); |
|
555 |
} |
|
556 |
} |
|
465 | 557 |
|
466 | 558 |
@Override |
467 | 559 |
public Disposable setParameters(PreparedStatement st, FeatureProvider feature) { |
Also available in: Unified diff