Revision 44844 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.dbf/src/main/java/org/gvsig/fmap/dal/store/dbf/utils/DbaseFileHeader.java
DbaseFileHeader.java | ||
---|---|---|
174 | 174 |
tempFieldDescriptors[myFieldDescriptions.length] = new DbaseFieldDescriptor(); |
175 | 175 |
tempFieldDescriptors[myFieldDescriptions.length].setType(fieldType); |
176 | 176 |
tempFieldDescriptors[myFieldDescriptions.length].setSize(fieldSize); |
177 |
tempFieldDescriptors[myFieldDescriptions.length].setPrecision(fieldPrecision); |
|
178 | 177 |
tempFieldDescriptors[myFieldDescriptions.length].setScale(fieldScale); |
179 | 178 |
tempFieldDescriptors[myFieldDescriptions.length].setOffsetInRecord(tempLength); |
180 | 179 |
|
... | ... | |
432 | 431 |
|
433 | 432 |
myFieldDescriptions[i].setOffsetInRecord(fieldOffset); |
434 | 433 |
|
435 |
myFieldDescriptions[i].calculateScaleAndPrecission(); |
|
436 |
|
|
437 | 434 |
fieldOffset += tempLength; |
438 | 435 |
|
439 | 436 |
// read the reserved bytes. |
... | ... | |
707 | 704 |
} else { |
708 | 705 |
attr = featureType.add( |
709 | 706 |
dbfattr.getName(), |
710 |
DataTypes.BYTE
|
|
707 |
DataTypes.DECIMAL
|
|
711 | 708 |
); |
712 | 709 |
attr.setPrecision(dbfattr.getPrecision()); |
713 | 710 |
attr.setScale(0); |
... | ... | |
753 | 750 |
} else { |
754 | 751 |
attr = featureType.add( |
755 | 752 |
dbfattr.getName(), |
756 |
DataTypes.BYTE
|
|
753 |
DataTypes.DECIMAL
|
|
757 | 754 |
); |
758 | 755 |
attr.setPrecision(dbfattr.getPrecision()); |
759 | 756 |
attr.setScale(0); |
... | ... | |
805 | 802 |
DBFStoreProvider.NAME |
806 | 803 |
); |
807 | 804 |
} |
805 |
attr.setRequiredBytes(dbfattr.getSize()); |
|
808 | 806 |
} |
809 | 807 |
return featureType; |
810 | 808 |
} |
... | ... | |
835 | 833 |
int size = descriptor.getSize(); |
836 | 834 |
int scale = descriptor.getScale(); |
837 | 835 |
int precision = descriptor.getPrecision(); |
836 |
int requiredBytes = descriptor.getRequiredBytes(); |
|
838 | 837 |
switch (type) { |
839 | 838 |
case DataTypes.DECIMAL: |
840 |
header.addColumn(colName, 'N', 0, precision, scale);
|
|
839 |
header.addColumn(colName, 'N', requiredBytes>0?requiredBytes:precision+3, precision, scale);
|
|
841 | 840 |
break; |
842 | 841 |
case DataTypes.DOUBLE: |
842 |
header.addColumn(colName, 'F', |
|
843 |
requiredBytes>0?requiredBytes:(precision+2>=DataType.DOUBLE_MAX_PRECISION?precision:precision+3), |
|
844 |
precision, scale |
|
845 |
); |
|
846 |
break; |
|
843 | 847 |
case DataTypes.FLOAT: |
844 |
header.addColumn(colName, 'F', 0, precision, scale); |
|
848 |
header.addColumn(colName, 'F', |
|
849 |
requiredBytes>0?requiredBytes:(precision+2>=DataType.FLOAT_MAX_PRECISION?precision:precision+3), |
|
850 |
precision, scale |
|
851 |
); |
|
845 | 852 |
break; |
846 | 853 |
case DataTypes.INT: |
847 |
header.addColumn(colName, 'N', 0, precision, scale); |
|
854 |
header.addColumn(colName, 'N', |
|
855 |
requiredBytes>0?requiredBytes:(precision>=DataType.INT_MAX_PRECISION?precision:precision+1), |
|
856 |
precision, scale |
|
857 |
); |
|
848 | 858 |
break; |
849 | 859 |
case DataTypes.LONG: |
850 |
header.addColumn(colName, 'N', 0, precision, scale); |
|
860 |
header.addColumn(colName, 'N', |
|
861 |
requiredBytes>0?requiredBytes:(precision>=DataType.LONG_MAX_PRECISION?precision:precision+1), |
|
862 |
precision, scale |
|
863 |
); |
|
851 | 864 |
break; |
852 | 865 |
case DataTypes.DATE: |
853 | 866 |
header.addColumn(colName, 'D', FieldFormatter.DATE_SIZE, 0, 0); |
... | ... | |
856 | 869 |
header.addColumn(colName, 'C', FieldFormatter.TIME_SIZE, 0, 0); |
857 | 870 |
break; |
858 | 871 |
case DataTypes.TIMESTAMP: |
859 |
header.addColumn(colName, 'C', TIMESTAMP_SIZE, 0, 0); |
|
872 |
header.addColumn(colName, 'C', FieldFormatter.TIMESTAMP_SIZE, 0, 0);
|
|
860 | 873 |
break; |
861 | 874 |
case DataTypes.BOOLEAN: |
862 | 875 |
header.addColumn(colName, 'L', 1, 0, 0); |
... | ... | |
865 | 878 |
header.addColumn(colName, 'C', Math.min(254, size), 0, 0); |
866 | 879 |
break; |
867 | 880 |
case DataTypes.BYTE: |
868 |
header.addColumn(colName, 'N', 0, precision, scale); |
|
881 |
header.addColumn(colName, 'N', |
|
882 |
requiredBytes>0?requiredBytes:(precision>=DataType.BYTE_MAX_PRECISION?precision:precision+1), |
|
883 |
precision, scale |
|
884 |
); |
|
869 | 885 |
break; |
870 | 886 |
default: |
871 | 887 |
// Si no sabemos lo que es intentaremos guardarlo como un string |
Also available in: Unified diff