Statistics
| Revision:

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

History | View | Annotate | Download (2.33 KB)

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

    
3
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.*;
4
import java.sql.Connection;
5
import java.sql.ResultSet;
6
import java.sql.SQLException;
7
import java.sql.Statement;
8
import org.apache.commons.lang3.StringUtils;
9
import org.gvsig.fmap.dal.exception.DataException;
10
import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException;
11
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
12
import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
13
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
14

    
15
public class MSSQLServerCanModifyTableOperation extends CanModifyTableOperation {
16

    
17
    public MSSQLServerCanModifyTableOperation(
18
            JDBCHelper helper
19
        ) {
20
        this(helper, null);
21
    }
22

    
23
    public MSSQLServerCanModifyTableOperation(
24
            JDBCHelper helper,
25
            TableReference table
26
        ) {
27
        super(helper,table);
28
    }
29

    
30
    private String getFullTableName( 
31
            TableReference table
32
    ) {
33
        StringBuilder builder = new StringBuilder();
34
        if( table.hasDatabase() ) {
35
            builder.append(table.getDatabase());
36
        }
37
        if( table.hasSchema() ) {
38
            if( builder.length()>0 ) {
39
                builder.append(".");
40
            }
41
            builder.append(table.getSchema());
42
        }
43
        if( table.hasTable() ) {
44
            if( builder.length()>0 ) {
45
                builder.append(".");
46
            }
47
            builder.append(table.getTable());
48
        }
49
        return builder.toString();
50
    }
51
    
52
    @Override
53
    public boolean canModifyTable(Connection conn,
54
            TableReference table
55
        ) throws DataException {
56

    
57
        String sql = "SELECT count(*) " + 
58
                     "FROM fn_my_permissions('"+getFullTableName(table)+"', 'OBJECT') " +
59
                     "WHERE permission_name in ('UPDATE', 'INSERT', 'DELETE') AND subentity_name = ''";
60
        Statement st = null;
61
        ResultSet rs = null;
62
        try {
63
            st = conn.createStatement();
64
            rs = JDBCUtils.executeQuery(st, sql);
65
            if (!rs.next()) {
66
                return false;
67
            }
68
            return rs.getInt(1)==3;
69

    
70
        } catch (SQLException ex) {
71
            throw new JDBCSQLException(ex);
72
        } finally {
73
            JDBCUtils.closeQuietly(st);
74
            JDBCUtils.closeQuietly(rs);
75
        }
76

    
77
    }
78

    
79
}