|
From: <dav...@us...> - 2011-09-28 13:47:52
|
Revision: 948
http://instantobjects.svn.sourceforge.net/instantobjects/revision/?rev=948&view=rev
Author: davidvtaylor
Date: 2011-09-28 13:47:46 +0000 (Wed, 28 Sep 2011)
Log Message:
-----------
+ Add a MSSQL 2005 protocol to the AnyDAC broker. The new protocol uses VARCHAR(MAX) and VARBINARY(MAX) for Memo and Blob fields respectively
Modified Paths:
--------------
trunk/Source/Brokers/AnyDAC/InstantAnyDACCatalog.pas
trunk/Source/Brokers/AnyDAC/InstantAnyDACConnectionDefEdit.pas
Modified: trunk/Source/Brokers/AnyDAC/InstantAnyDACCatalog.pas
===================================================================
--- trunk/Source/Brokers/AnyDAC/InstantAnyDACCatalog.pas 2011-09-17 04:58:48 UTC (rev 947)
+++ trunk/Source/Brokers/AnyDAC/InstantAnyDACCatalog.pas 2011-09-28 13:47:46 UTC (rev 948)
@@ -20,7 +20,7 @@
*
* The Initial Developer of the Original Code is: David Taylor
*
- * Portions created by the Initial Developer are Copyright (C) 2009
+ * Portions created by the Initial Developer are Copyright (C) 2009-2011
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
@@ -54,7 +54,8 @@
const Catalog : string; Schema : string);
procedure AddTableMetadatas(TableMetadatas: TInstantTableMetadatas);
function ColumnTypeToDataType(const ColumnType: TADDataType;
- out DataType: TInstantDataType; out AlternateDataTypes: TInstantDataTypes): Boolean;
+ const ColumnLength : variant; out DataType: TInstantDataType;
+ out AlternateDataTypes: TInstantDataTypes): Boolean;
function GetBroker: TInstantAnyDACBroker;
function GetConnector: TInstantAnyDACConnector;
public
@@ -95,17 +96,19 @@
ADFieldName := VarToStr(FieldRow.GetData('COLUMN_NAME'));
ADFieldType := TADDataType(FieldRow.GetData('COLUMN_DATATYPE'));
IntValue := FieldRow.GetData('COLUMN_ATTRIBUTES');
+ ColumnLength := FieldRow.GetData('COLUMN_LENGTH');
ADFieldAttrib := TADDataAttributes(pointer(@IntValue)^);
- if ColumnTypeToDataType(ADFieldType, FieldDataType, FieldAltDataTypes) then
+ if ColumnTypeToDataType(ADFieldType, ColumnLength, FieldDataType, FieldAltDataTypes) then
begin
FieldMetadata := TableMetadata.FieldMetadatas.Add;
FieldMetadata.Name := ADFieldName;
FieldMetadata.DataType := FieldDataType;
FieldMetadata.AlternateDataTypes := FieldAltDataTypes;
- ColumnLength := FieldRow.GetData('COLUMN_LENGTH');
+
if VarIsOrdinal(ColumnLength) then
- FieldMetadata.Size := Integer(ColumnLength);
+ FieldMetadata.Size := Integer(ColumnLength);
+
FieldMetadata.Options := [];
if (not (caAllowNull in ADFieldAttrib)) then
@@ -203,7 +206,7 @@
// This is a bit of hack since each segment in the index defines
// its own sort order. IO does not support this so we record the
- // sort order of the first s(and possibly only) key field.
+ // sort order of the first (and possibly only) key field.
if (J = 0) then
begin
if (VarToStr(IndexFieldRow.GetData('SORT_ORDER')) = 'D') then
@@ -252,15 +255,31 @@
end;
function TInstantAnyDACCatalog.ColumnTypeToDataType(const ColumnType: TADDataType;
- out DataType: TInstantDataType; out AlternateDataTypes: TInstantDataTypes): Boolean;
+ const ColumnLength : variant; out DataType: TInstantDataType;
+ out AlternateDataTypes: TInstantDataTypes): Boolean;
begin
Result := True;
AlternateDataTypes := [];
-
+
case ColumnType of
- uADStanIntf.dtAnsiString: DataType := InstantTypes.dtString;
- uADStanIntf.dtWideString: DataType := InstantTypes.dtString;
- uADStanIntf.dtByteString: DataType := InstantTypes.dtString;
+ uADStanIntf.dtAnsiString,
+ uADStanIntf.dtWideString:
+ begin
+ if VarIsOrdinal(ColumnLength) and (Integer(ColumnLength) = MAXINT) then
+ begin
+ DataType := InstantTypes.dtMemo;
+ Include(AlternateDataTypes, InstantTypes.dtString);
+ end else
+ begin
+ DataType := InstantTypes.dtString;
+ end;
+ end;
+ uADStanIntf.dtByteString:
+ begin
+ if VarIsOrdinal(ColumnLength) and (Integer(ColumnLength) = MAXINT) then
+ DataType := InstantTypes.dtBlob else
+ Result := False;
+ end;
uADStanIntf.dtBoolean: DataType := InstantTypes.dtBoolean;
uADStanIntf.dtDateTime: DataType := InstantTypes.dtDateTime;
uADStanIntf.dtTime: DataType := InstantTypes.dtTime;
Modified: trunk/Source/Brokers/AnyDAC/InstantAnyDACConnectionDefEdit.pas
===================================================================
--- trunk/Source/Brokers/AnyDAC/InstantAnyDACConnectionDefEdit.pas 2011-09-17 04:58:48 UTC (rev 947)
+++ trunk/Source/Brokers/AnyDAC/InstantAnyDACConnectionDefEdit.pas 2011-09-28 13:47:46 UTC (rev 948)
@@ -20,7 +20,7 @@
*
* The Initial Developer of the Original Code is: David Taylor
*
- * Portions created by the Initial Developer are Copyright (C) 2009
+ * Portions created by the Initial Developer are Copyright (C) 2009-2011
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
|