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

View differences:

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