Revision 46724

View differences:

trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/SQLBuilderBase.java
2551 2551
                            )
2552 2552
                    );
2553 2553
                }
2554
                sqls.add(builder.toString());
2555
            }
2556
            for (ColumnDescriptor column : alters) {
2557
                StringBuilder builder = new StringBuilder();
2558
                builder.append("ALTER TABLE ");
2559
                builder.append(this.table.toString(formatter));
2560
                builder.append(" ALTER COLUMN ");
2561
                builder.append(as_identifier(column.getName()));
2554 2562
                if (column.getDefaultValue() == null) {
2555 2563
                    if (column.allowNulls()) {
2556
                        builder.append(" DEFAULT NULL");
2564
                        builder.append(" SET DEFAULT NULL");
2557 2565
                    } else {
2558 2566
                        builder.append(" DROP DEFAULT");
2559 2567
                    }
2560 2568
                } else {
2561
                    builder.append(" DEFAULT '");
2569
                    builder.append(" SET DEFAULT '");
2562 2570
                    builder.append(column.getDefaultValue().toString());
2563 2571
                    builder.append("'");
2564 2572
                }
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/OperationsFactory.java
34 34
import org.gvsig.fmap.dal.feature.FeatureQuery;
35 35
import org.gvsig.fmap.dal.feature.FeatureType;
36 36
import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
37
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
37 38
import org.gvsig.fmap.dal.store.jdbc.JDBCNewStoreParameters;
38 39
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
39 40
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
......
123 124
            Iterator featureTypesChanged
124 125
    );
125 126

  
127
    public PerformChangesOperation createPerformChanges(
128
            TableReference table,
129
            FeatureType type,
130
            Iterator deleteds,
131
            Iterator inserteds,
132
            Iterator updateds,
133
            Iterator featureTypesChanged,
134
            FeatureStoreProviderServices storeServices
135
    );
136

  
126 137
    public AppendOperation createAppend(
127 138
            TableReference table,
128 139
            FeatureType type
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/spi/JDBCStoreProviderBase.java
585 585
                deleteds, 
586 586
                inserteds, 
587 587
                updateds, 
588
                featureTypesChanged
588
                featureTypesChanged,
589
                this.getStoreServices()
589 590
        );
590 591
        performChanges.perform();
591 592
        if( performChanges.isTypeChanged() ) {
......
668 669
                Collections.emptyIterator(), 
669 670
                Collections.singletonList(featureProvider).iterator(),
670 671
                Collections.emptyIterator(), 
671
                Collections.emptyIterator()
672
                Collections.emptyIterator(),
673
                this.getStoreServices()
672 674
        );
673 675
        performChanges.perform();
674 676
        this.getCountValue().reset();
......
685 687
                Collections.emptyIterator(), 
686 688
                Collections.emptyIterator(), 
687 689
                Collections.singletonList(featureProvider).iterator(),
688
                Collections.emptyIterator()
690
                Collections.emptyIterator(),
691
                this.getStoreServices()
689 692
        );
690 693
        performChanges.perform();
691 694
//        this.getCountValue().reset();
......
715 718
                Collections.singletonList(featureReference).iterator(),
716 719
                Collections.emptyIterator(), 
717 720
                Collections.emptyIterator(), 
718
                Collections.emptyIterator()
721
                Collections.emptyIterator(),
722
                this.getStoreServices()
719 723
        );
720 724
        performChanges.perform();
721 725
        this.getCountValue().reset();
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/spi/operations/PerformChangesOperation.java
27 27
import java.sql.SQLException;
28 28
import java.sql.Statement;
29 29
import java.util.ArrayList;
30
import java.util.Arrays;
30 31
import java.util.Iterator;
31 32
import java.util.List;
32 33
import java.util.Objects;
......
38 39
import org.gvsig.expressionevaluator.ExpressionUtils;
39 40
import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
40 41
import org.gvsig.fmap.dal.DataTypes;
42
import static org.gvsig.fmap.dal.SQLBuilder.PROP_FEATURE_TYPE;
43
import static org.gvsig.fmap.dal.SQLBuilder.PROP_TABLE;
41 44
import org.gvsig.fmap.dal.exception.DataException;
45
import org.gvsig.fmap.dal.feature.EditableFeatureType;
42 46
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
43 47
import org.gvsig.fmap.dal.feature.FeatureReference;
44 48
import org.gvsig.fmap.dal.feature.FeatureType;
45 49
import org.gvsig.fmap.dal.feature.FeatureType.FeatureTypeChanged;
46 50
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
47 51
import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
52
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
53
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
48 54
import org.gvsig.fmap.dal.store.jdbc.exception.JDBCExecuteSQLException;
49 55
import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException;
50 56
import org.gvsig.fmap.dal.store.jdbc2.JDBCConnection;
......
52 58
import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
53 59
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
54 60
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
55
import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_FEATURE_TYPE;
56
import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_TABLE;
57 61
import org.gvsig.tools.dispose.Disposable;
58 62
import org.gvsig.tools.dispose.DisposeUtils;
59 63
import org.gvsig.tools.util.Invocable;
......
70 74
    protected Iterator<FeatureProvider> inserteds;
71 75

  
72 76
    protected boolean typeChanged = false;
77
    protected final FeatureStoreProviderServices storeServices;
73 78
    
74 79
    public PerformChangesOperation(JDBCHelper helper) {
75
        this(helper, null, null, null, null, null, null);
80
        this(helper, null, null, null, null, null, null, null);
76 81
    }
77 82

  
78 83
    public PerformChangesOperation(JDBCHelper helper,
......
81 86
            Iterator<FeatureReferenceProviderServices> deleteds,
82 87
            Iterator<FeatureProvider> inserteds,
83 88
            Iterator<FeatureProvider> updateds,
84
            Iterator<FeatureTypeChanged> featureTypesChanged) {
89
            Iterator<FeatureTypeChanged> featureTypesChanged,
90
            FeatureStoreProviderServices storeServices) {
85 91
        super(helper);
86 92
        this.deleteds = deleteds;
87 93
        this.inserteds = inserteds;
......
98 104
            this.featureTypeTarget = null;
99 105
            typeChanged = false;
100 106
        }
107
        this.storeServices = storeServices;
101 108
    }
102 109

  
103 110
    public boolean isTypeChanged() {
......
366 373
            }
367 374
        }
368 375
    }
376
    
377
    protected FeatureType getCurrentFeatureTypeDB(){
378
        if(this.storeServices == null){
379
            return this.featureTypeSource;
380
        }
381
        try{
382
            JDBCStoreParameters params = (JDBCStoreParameters) this.storeServices.getFeatureStore().getParameters();
383
            EditableFeatureType type = this.storeServices.createFeatureType(this.storeServices.getName());
384
            FetchFeatureTypeOperation fetchFeatureType = 
385
                 this.helper.getOperations().createFetchFeatureType(
386
                    type,
387
                    this.table,
388
                    params.getPkFields()==null?null:Arrays.asList(params.getPkFields()),
389
                    params.getDefaultGeometryField(),
390
                    params.getCRS(),
391
                    params.getGeometryType(),
392
                    params.getGeometrySubtype()
393
                );
394
            fetchFeatureType.perform();
395
            return type;
396
        } catch(Throwable t){
397
            LOGGER.warn("Can't get current feature type from database of table = "+Objects.toString(this.table), t);
398
            return this.featureTypeSource;
399
        }
400
    }
369 401

  
370 402
    public List<String> getUpdateTableSQLs() {
403
        FeatureType currentFeatureTypeDB = getCurrentFeatureTypeDB();
404
        
371 405
        JDBCSQLBuilderBase sqlbuilder = createSQLBuilder();
372 406
        sqlbuilder.alter_table().table()
373 407
                .database(this.table.getDatabase())
......
375 409
                .name(this.table.getTable());
376 410

  
377 411
        // Primero comprobamos si hay que eliminar la primary-key o algun indice
378
        for (FeatureAttributeDescriptor attrOrgiginal : featureTypeSource) {
412
        for (FeatureAttributeDescriptor attrOrgiginal : currentFeatureTypeDB) {
379 413
            if( attrOrgiginal.isComputed() ) {
380 414
                continue;
381 415
            }
......
391 425
        }
392 426

  
393 427
        // Comprobamos si hay que eliminar o modificar alguna columna existente
394
        for (FeatureAttributeDescriptor attrOrgiginal : featureTypeSource) {
428
        for (FeatureAttributeDescriptor attrOrgiginal : currentFeatureTypeDB) {
395 429
            if( attrOrgiginal.isComputed() ) {
396 430
                continue;
397 431
            }
......
438 472
            if( attrTarget.isComputed() ) {
439 473
                continue;
440 474
            }
441
            FeatureAttributeDescriptor attrOrgiginal = featureTypeSource.getAttributeDescriptor(
475
            FeatureAttributeDescriptor attrOrgiginal = currentFeatureTypeDB.getAttributeDescriptor(
442 476
                    attrTarget.getName()
443 477
            );
444 478
            if (attrOrgiginal == null) {
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/spi/operations/OperationsFactoryBase.java
35 35
import org.gvsig.fmap.dal.feature.FeatureQuery;
36 36
import org.gvsig.fmap.dal.feature.FeatureType;
37 37
import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
38
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
38 39
import org.gvsig.fmap.dal.store.jdbc.JDBCNewStoreParameters;
39 40
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
40 41
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
......
213 214
            Iterator updateds, 
214 215
            Iterator featureTypesChanged
215 216
        ) {
217
        return createPerformChanges(table, type, deleteds, inserteds, updateds, featureTypesChanged, null);
218
    }
219

  
220
    @Override
221
    public PerformChangesOperation createPerformChanges(
222
            TableReference table, 
223
            FeatureType type, 
224
            Iterator deleteds, 
225
            Iterator inserteds, 
226
            Iterator updateds, 
227
            Iterator featureTypesChanged,
228
            FeatureStoreProviderServices storeServices
229
        ) {
216 230
        return new PerformChangesOperation(helper, table, type, 
217
                deleteds, inserteds, updateds, featureTypesChanged);
231
                deleteds, inserteds, updateds, featureTypesChanged, storeServices);
218 232
    }
219 233

  
220 234
    @Override

Also available in: Unified diff