From: Nando D. <na...@us...> - 2005-07-13 09:47:58
|
Update of /cvsroot/instantobjects/Source/Catalogs/IBFb In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16891/Catalogs/IBFb Modified Files: InstantIBFbCatalog.pas Log Message: added support for alternate data type for a database column; fixes some mapping problems that prevent recognizing f. ex. a boolean field in IB/Fb during database evolution Index: InstantIBFbCatalog.pas =================================================================== RCS file: /cvsroot/instantobjects/Source/Catalogs/IBFb/InstantIBFbCatalog.pas,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** InstantIBFbCatalog.pas 26 Jun 2005 13:29:46 -0000 1.2 --- InstantIBFbCatalog.pas 13 Jul 2005 09:47:50 -0000 1.3 *************** *** 15,20 **** procedure AddIndexMetadatas(TableMetadata: TInstantTableMetadata); procedure AddTableMetadatas(TableMetadatas: TInstantTableMetadatas); function ColumnTypeToDataType(const ColumnType: string; ! const BlobSubType, FieldScale: Integer): TInstantDataType; function GetSelectFieldsSQL(const ATableName: string): string; function GetSelectIndexesSQL(const ATableName: string): string; --- 15,25 ---- procedure AddIndexMetadatas(TableMetadata: TInstantTableMetadata); procedure AddTableMetadatas(TableMetadatas: TInstantTableMetadatas); + // Returns the TInstantDataType value that matches the supplied + // combination of ColumnType, BlobSubType and FieldScale. If more than + // on datatypes apply, alternate data types are returned in + // AlternateDataTypes, otherwise AlternateDataTypes is [] on exit. function ColumnTypeToDataType(const ColumnType: string; ! const BlobSubType, FieldScale: Integer; ! out AlternateDataTypes: TInstantDataTypes): TInstantDataType; function GetSelectFieldsSQL(const ATableName: string): string; function GetSelectIndexesSQL(const ATableName: string): string; *************** *** 99,102 **** --- 104,108 ---- Fields: TDataSet; FieldMetadata: TInstantFieldMetadata; + AlternateDataTypes: TInstantDataTypes; begin Fields := Broker.AcquireDataSet(GetSelectFieldsSQL(TableMetadata.Name)); *************** *** 111,115 **** Trim(Fields.FieldByName('RDB$TYPE_NAME').AsString), Fields.FieldByName('RDB$FIELD_SUB_TYPE').AsInteger, ! Fields.FieldByName('RDB$FIELD_SCALE').AsInteger); FieldMetadata.Options := []; if Fields.FieldByName('RDB$NULL_FLAG').AsInteger <> 0 then --- 117,123 ---- Trim(Fields.FieldByName('RDB$TYPE_NAME').AsString), Fields.FieldByName('RDB$FIELD_SUB_TYPE').AsInteger, ! Fields.FieldByName('RDB$FIELD_SCALE').AsInteger, ! AlternateDataTypes); ! FieldMetadata.AlternateDataTypes := AlternateDataTypes; FieldMetadata.Options := []; if Fields.FieldByName('RDB$NULL_FLAG').AsInteger <> 0 then *************** *** 161,170 **** function TInstantIBFbCatalog.ColumnTypeToDataType(const ColumnType: string; ! const BlobSubType, FieldScale: Integer): TInstantDataType; begin { TODO : How to use FieldScale? } if SameText(ColumnType, 'TEXT') or SameText(ColumnType, 'VARYING') then Result := dtString ! else if SameText(ColumnType, 'SHORT') or SameText(ColumnType, 'LONG') then Result := dtInteger else if SameText(ColumnType, 'FLOAT') or SameText(ColumnType, 'DOUBLE') then --- 169,184 ---- function TInstantIBFbCatalog.ColumnTypeToDataType(const ColumnType: string; ! const BlobSubType, FieldScale: Integer; ! out AlternateDataTypes: TInstantDataTypes): TInstantDataType; begin + AlternateDataTypes := []; { TODO : How to use FieldScale? } if SameText(ColumnType, 'TEXT') or SameText(ColumnType, 'VARYING') then Result := dtString ! else if SameText(ColumnType, 'SHORT') then begin ! Result := dtBoolean; ! Include(AlternateDataTypes, dtInteger); ! end ! else if SameText(ColumnType, 'LONG') then Result := dtInteger else if SameText(ColumnType, 'FLOAT') or SameText(ColumnType, 'DOUBLE') then *************** *** 180,183 **** --- 194,199 ---- Result := dtBlob; end + else if SameText(ColumnType, 'INT64') then + Result := dtCurrency else raise Exception.CreateFmt('ColumnType %s not supported.', [ColumnType]); |