Revision 34285 trunk/extensions/extOracleSpatial/src/es/prodevelop/cit/gvsig/fmap/drivers/jdbc/oracle/OracleSpatialDriver.java

View differences:

OracleSpatialDriver.java
159 159
    public static final String ORACLE_GEO_SCHEMA = "MDSYS";
160 160
    public static final String CONN_STR_BEGIN = "jdbc:oracle:thin:";
161 161
    
162
    public static final int VARCHAR2_DEFAULT_SIZE = 2000; //  512;  
163
    public static final int VARCHAR2_MAX_SIZE = 2000;
162
    // public static final int VARCHAR2_DEFAULT_SIZE = 2000; //  512;  
163
    public static final int VARCHAR2_MAX_SIZE = 4000;
164 164
    
165 165
    public static final int MAX_ID_LENGTH = 30;
166 166
    private final static GeometryFactory geomFactory = new GeometryFactory();
......
1234 1234

  
1235 1235
        try {
1236 1236
            int aux = fieldId + 1; // fieldId viene basado en 0
1237
            i = metaData.getColumnDisplaySize(aux);
1237
            int _type = metaData.getColumnType(aux);
1238
            if (NumberUtilities.isNumeric(_type)) {
1239
                i = metaData.getPrecision(aux);
1240
            } else {
1241
                i = metaData.getColumnDisplaySize(aux);
1242
            }
1238 1243
        }
1239 1244
        catch (SQLException e) {
1240 1245
            logger.error("While getting field width: " + e.getMessage());
......
1718 1723

  
1719 1724

  
1720 1725

  
1721
    public static String fieldTypeToSqlStringType(FieldDescription fieldDesc) {
1722
        String aux = "VARCHAR2(" + VARCHAR2_DEFAULT_SIZE + " BYTE)"; // Por defecto.
1726
    public static String fieldTypeToSqlStringType(FieldDescription fd) {
1727
    	
1728
        String aux = "VARCHAR2(" + VARCHAR2_MAX_SIZE + ")"; // Por defecto.
1729
        int the_type = fd.getFieldType();
1730
        
1731
        int _w = fd.getFieldLength();
1732
        int _dec = 0;
1733
        
1734
        if (NumberUtilities.isNumeric(the_type)) {
1735
        	_dec = fd.getFieldDecimalCount(); 
1736
        }
1723 1737

  
1724
        switch (fieldDesc.getFieldType()) {
1738
        switch (the_type) {
1725 1739
        case Types.SMALLINT:
1726
            aux = "NUMBER(5, 0)";
1727

  
1740
            aux = "NUMBER(" + _w + ", 0)";
1728 1741
            break;
1729 1742

  
1730 1743
        case Types.INTEGER:
1731
            aux = "NUMBER(12, 0)";
1732

  
1744
            aux = "NUMBER(" + _w + ", 0)";
1733 1745
            break;
1734 1746

  
1735 1747
        case Types.BIGINT:
1736
            aux = "NUMBER(38, 0)";
1737

  
1748
            aux = "NUMBER(" + _w + ", 0)";
1738 1749
            break;
1739 1750

  
1740 1751
        case Types.BOOLEAN:
1741 1752
            aux = "NUMBER(1, 0)";
1742

  
1743 1753
            break;
1744 1754

  
1745 1755
        case Types.DECIMAL:
1746
            aux = "NUMBER";
1747

  
1756
            aux = "NUMBER(" + _w + ", " + _dec + ")";
1748 1757
            break;
1749 1758

  
1750 1759
        case Types.NUMERIC:
1751
            aux = "NUMBER";
1752

  
1760
            aux = "NUMBER(" + _w + ", " + _dec + ")";
1753 1761
            break;
1754 1762

  
1755 1763
        case Types.DOUBLE:
1756
            aux = "FLOAT";
1757

  
1764
            aux = "NUMBER(" + _w + ", " + _dec + ")";
1758 1765
            break;
1759 1766

  
1760 1767
        case Types.FLOAT:
1761
            aux = "FLOAT";
1762

  
1768
            aux = "NUMBER(" + _w + ", " + _dec + ")";
1763 1769
            break;
1764 1770

  
1765 1771
        case Types.CHAR:
1766 1772
            aux = "CHAR(1 BYTE)";
1767

  
1768 1773
            break;
1769 1774

  
1770 1775
        case Types.VARCHAR:
1771
            aux = "NVARCHAR2(" + nvarchar2Limited(fieldDesc.getFieldLength()) + ")";
1772

  
1776
            aux = "VARCHAR2(" + _w + ")";
1773 1777
            break;
1774 1778

  
1775 1779
        case Types.LONGVARCHAR:
1776
            aux = "NVARCHAR2(" + nvarchar2Limited(fieldDesc.getFieldLength()) + ")";
1777

  
1780
            aux = "VARCHAR2(" + _w + ")";
1778 1781
            break;
1782
            
1783
        case Types.DATE:
1784
            aux = "DATE";
1785
            break;
1786

  
1779 1787
        }
1780 1788

  
1781 1789
        return aux;
......
2860 2868

  
2861 2869
        try {
2862 2870
            STRUCT the_struct = OracleSpatialUtils.fShapeToSTRUCT(shp, _conn,
2863
                    _srid, agu_bien, hasSrid);
2871
                    _srid, agu_bien, hasSrid, _isGeoCS);
2864 2872

  
2865 2873
            return the_struct;
2866 2874
        }
......
3738 3746
	public void write(DataWare arg0) throws WriteDriverException, ReadDriverException {
3739 3747
	}
3740 3748
	
3741
	public static int nvarchar2Limited(int n) {
3742
		
3743
		if (n <= VARCHAR2_DEFAULT_SIZE) return VARCHAR2_DEFAULT_SIZE;
3744
		if (n <= VARCHAR2_MAX_SIZE) return n;
3745
		
3746
		return VARCHAR2_MAX_SIZE;
3747
	}
3748
	
3749

  
3750
    
3751

  
3752
	
3753 3749
	public static String removePrefix(String str) {
3754 3750
		
3755 3751
		int colon_ind = str.indexOf(":");

Also available in: Unified diff