Statistics
| Revision:

gvsig-mssqlserver / trunk / org.gvsig.mssqlserver / org.gvsig.mssqlserver.provider / src / main / java / org / gvsig / mssqlserver / dal / operations / MSSQLServerPerformChangesOperation.java @ 197

History | View | Annotate | Download (3.88 KB)

1
package org.gvsig.mssqlserver.dal.operations;
2

    
3
import java.util.ArrayList;
4
import java.util.Iterator;
5
import java.util.List;
6
import org.gvsig.fmap.dal.DataTypes;
7
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
8
import org.gvsig.fmap.dal.feature.FeatureType;
9
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
10
import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
11
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider;
12
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
13
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
14
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
15
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.PerformChangesOperation;
16
import org.gvsig.mssqlserver.dal.MSSQLServerHelper;
17
import org.gvsig.mssqlserver.dal.MSSQLServerSQLBuilder.MSSQLServerCreateIndexBuilder;
18

    
19
@SuppressWarnings("UseSpecificCatch")
20
public class MSSQLServerPerformChangesOperation extends PerformChangesOperation {
21

    
22
    public MSSQLServerPerformChangesOperation(JDBCHelper helper) {
23
        this(helper, null, null, null, null, null, null);
24
    }
25

    
26
    public MSSQLServerPerformChangesOperation(JDBCHelper helper,
27
            TableReference table,
28
            FeatureType featureType,
29
            Iterator<FeatureReferenceProviderServices> deleteds,
30
            Iterator<FeatureProvider> inserteds,
31
            Iterator<FeatureProvider> updateds,
32
            Iterator<FeatureStoreProvider.FeatureTypeChanged> featureTypesChanged) {
33
        super(helper, table, featureType, deleteds, inserteds, updateds, featureTypesChanged);
34
    }
35
    
36
    protected MSSQLServerHelper getHelper() {
37
        return (MSSQLServerHelper) this.helper;
38
    }
39
    
40
    @Override
41
    protected List<String> buildCreateIndexSQL(
42
            TableReference table,
43
            FeatureType original,
44
            FeatureType target
45
        ) {
46
        for (FeatureAttributeDescriptor attrTarget : target) {
47
            boolean createIndex = false;
48
            if( attrTarget.isIndexed() ) {
49
                FeatureAttributeDescriptor attrOriginal = original.getAttributeDescriptor(attrTarget.getName());
50
                if ( attrOriginal == null) {
51
                    createIndex = true;
52
                } else {
53
                    if( attrOriginal.isIndexed() ) {
54
                        createIndex = false;
55
                    } else {
56
                        createIndex = true;
57
                    }
58
                }
59
            }
60
            if( createIndex ) {
61
                if( attrTarget.getType()==DataTypes.GEOMETRY ) {
62
                    try {
63
                        return this.getHelper().createOrUpdateSpatialIndexSql(
64
                                this.getConnection(),
65
                                table.getDatabase(),
66
                                table.getSchema(),
67
                                table.getTable(),
68
                                attrTarget.getName()
69
                        );
70
                    } catch (Exception ex) {
71
                        throw new RuntimeException("Can't create or update spatial index.", ex);
72
                    }
73
                } else {
74
                    JDBCSQLBuilderBase sqlbuilder = createSQLBuilder();
75
                    MSSQLServerCreateIndexBuilder create_index = (MSSQLServerCreateIndexBuilder) sqlbuilder.create_index();
76
                    create_index.if_not_exist();
77
                    create_index.name("idx_" + table + "_" + attrTarget.getName());
78
                    create_index.column(attrTarget.getName());
79
                    create_index.table()
80
                        .database(table.getDatabase())
81
                        .schema(table.getSchema())
82
                        .name(table.getTable());
83
                    return create_index.toStrings();
84
                }
85
            }
86
        }
87
        return new ArrayList<>();
88
    }    
89
}