--- ibx/trunk/fbintf/client/3.0/FB30Statement.pas 2017/02/24 17:05:03 55 +++ ibx/trunk/fbintf/client/3.0/FB30Statement.pas 2017/03/06 10:20:02 56 @@ -25,9 +25,12 @@ * *) unit FB30Statement; +{$IFDEF MSWINDOWS} +{$DEFINE WINDOWS} +{$ENDIF} {$IFDEF FPC} -{$mode objfpc}{$H+} +{$mode delphi} {$codepage UTF8} {$interfaces COM} {$ENDIF} @@ -94,32 +97,32 @@ type {SQL Var Type Data} FSQLType: cardinal; FSQLSubType: integer; - FSQLData: PChar; {Address of SQL Data in Message Buffer} + FSQLData: PByte; {Address of SQL Data in Message Buffer} FSQLNullIndicator: PShort; {Address of null indicator} FDataLength: integer; FNullable: boolean; FScale: integer; FCharSetID: cardinal; - FRelationName: string; - FFieldName: string; + FRelationName: AnsiString; + FFieldName: AnsiString; protected function GetSQLType: cardinal; override; function GetSubtype: integer; override; - function GetAliasName: string; override; - function GetFieldName: string; override; - function GetOwnerName: string; override; - function GetRelationName: string; override; + function GetAliasName: AnsiString; override; + function GetFieldName: AnsiString; override; + function GetOwnerName: AnsiString; override; + function GetRelationName: AnsiString; override; function GetScale: integer; override; function GetCharSetID: cardinal; override; function GetCodePage: TSystemCodePage; override; function GetIsNull: Boolean; override; function GetIsNullable: boolean; override; - function GetSQLData: PChar; override; + function GetSQLData: PByte; override; function GetDataLength: cardinal; override; procedure SetIsNull(Value: Boolean); override; procedure SetIsNullable(Value: Boolean); override; - procedure SetSQLData(AValue: PChar; len: cardinal); override; + procedure SetSQLData(AValue: PByte; len: cardinal); override; procedure SetScale(aValue: integer); override; procedure SetDataLength(len: cardinal); override; procedure SetSQLType(aValue: cardinal); override; @@ -170,11 +173,11 @@ type TIBXINPUTSQLDA = class(TIBXSQLDA) private - FMessageBuffer: PChar; {Message Buffer} + FMessageBuffer: PByte; {Message Buffer} FMsgLength: integer; {Message Buffer length} FCurMetaData: Firebird.IMessageMetadata; procedure FreeMessageBuffer; - function GetMessageBuffer: PChar; + function GetMessageBuffer: PByte; function GetMetaData: Firebird.IMessageMetadata; function GetModified: Boolean; function GetMsgLength: integer; @@ -188,7 +191,7 @@ type procedure Changed; override; function IsInputDataArea: boolean; override; property MetaData: Firebird.IMessageMetadata read GetMetaData; - property MessageBuffer: PChar read GetMessageBuffer; + property MessageBuffer: PByte read GetMessageBuffer; property MsgLength: integer read GetMsgLength; end; @@ -197,16 +200,16 @@ type TIBXOUTPUTSQLDA = class(TIBXSQLDA) private FTransaction: TFB30Transaction; {transaction used to execute the statement} - FMessageBuffer: PChar; {Message Buffer} + FMessageBuffer: PByte; {Message Buffer} FMsgLength: integer; {Message Buffer length} protected procedure FreeXSQLDA; override; public procedure Bind(aMetaData: Firebird.IMessageMetadata); procedure GetData(index: integer; var aIsNull: boolean; var len: short; - var data: PChar); override; + var data: PByte); override; function IsInputDataArea: boolean; override; - property MessageBuffer: PChar read FMessageBuffer; + property MessageBuffer: PByte read FMessageBuffer; property MsgLength: integer read FMsgLength; end; @@ -221,7 +224,7 @@ type destructor Destroy; override; {IResultSet} function FetchNext: boolean; - function GetCursorName: string; + function GetCursorName: AnsiString; function GetTransaction: ITransaction; override; function IsEof: boolean; procedure Close; @@ -246,9 +249,9 @@ type procedure InternalClose(Force: boolean); override; public constructor Create(Attachment: TFB30Attachment; Transaction: ITransaction; - sql: string; aSQLDialect: integer); + sql: AnsiString; aSQLDialect: integer); constructor CreateWithParameterNames(Attachment: TFB30Attachment; Transaction: ITransaction; - sql: string; aSQLDialect: integer; GenerateParamNames: boolean =false); + sql: AnsiString; aSQLDialect: integer; GenerateParamNames: boolean =false); destructor Destroy; override; function FetchNext: boolean; property StatementIntf: Firebird.IStatement read FStatementIntf; @@ -257,7 +260,7 @@ type {IStatement} function GetSQLParams: ISQLParams; override; function GetMetaData: IMetaData; override; - function GetPlan: String; + function GetPlan: AnsiString; function IsPrepared: boolean; function CreateBlob(column: TColumnMetaData): IBlob; override; function CreateArray(column: TColumnMetaData): IArray; override; @@ -290,7 +293,7 @@ begin Result := FSQLSubType; end; -function TIBXSQLVAR.GetAliasName: string; +function TIBXSQLVAR.GetAliasName: AnsiString; begin with Firebird30ClientAPI do begin @@ -299,12 +302,12 @@ begin end; end; -function TIBXSQLVAR.GetFieldName: string; +function TIBXSQLVAR.GetFieldName: AnsiString; begin Result := FFieldName; end; -function TIBXSQLVAR.GetOwnerName: string; +function TIBXSQLVAR.GetOwnerName: AnsiString; begin with Firebird30ClientAPI do begin @@ -313,7 +316,7 @@ begin end; end; -function TIBXSQLVAR.GetRelationName: string; +function TIBXSQLVAR.GetRelationName: AnsiString; begin Result := FRelationName; end; @@ -359,7 +362,7 @@ begin Result := FSQLNullIndicator <> nil; end; -function TIBXSQLVAR.GetSQLData: PChar; +function TIBXSQLVAR.GetSQLData: PByte; begin Result := FSQLData; end; @@ -420,7 +423,7 @@ begin FSQLNullIndicator := nil; end; -procedure TIBXSQLVAR.SetSQLData(AValue: PChar; len: cardinal); +procedure TIBXSQLVAR.SetSQLData(AValue: PByte; len: cardinal); begin if FOwnsSQLData then FreeMem(FSQLData); @@ -543,7 +546,7 @@ begin FResults.Column[i].RowChange; end; -function TResultSet.GetCursorName: string; +function TResultSet.GetCursorName: AnsiString; begin IBError(ibxeNotSupported,[nil]); Result := ''; @@ -595,7 +598,7 @@ begin FMsgLength := 0; end; -function TIBXINPUTSQLDA.GetMessageBuffer: PChar; +function TIBXINPUTSQLDA.GetMessageBuffer: PByte; begin PackBuffer; Result := FMessageBuffer; @@ -817,7 +820,7 @@ begin end; procedure TIBXOUTPUTSQLDA.GetData(index: integer; var aIsNull: boolean; - var len: short; var data: PChar); + var len: short; var data: PByte); begin with TIBXSQLVAR(Column[index]) do begin @@ -984,7 +987,7 @@ begin FStatementIntf := (GetAttachment as TFB30Attachment).AttachmentIntf.prepare(StatusIntf, (FTransactionIntf as TFB30Transaction).TransactionIntf, Length(FProcessedSQL), - PChar(FProcessedSQL), + PAnsiChar(FProcessedSQL), FSQLDialect, Firebird.IStatement.PREPARE_PREFETCH_METADATA); end @@ -992,7 +995,7 @@ begin FStatementIntf := (GetAttachment as TFB30Attachment).AttachmentIntf.prepare(StatusIntf, (FTransactionIntf as TFB30Transaction).TransactionIntf, Length(FSQL), - PChar(FSQL), + PAnsiChar(FSQL), FSQLDialect, Firebird.IStatement.PREPARE_PREFETCH_METADATA); Check4DataBaseError; @@ -1211,7 +1214,7 @@ begin if not Force then Check4DataBaseError; end; finally - if (FSQLRecord.FTransaction <> nil) and (FSQLRecord.FTransaction <> FTransactionIntf) then + if (FSQLRecord.FTransaction <> nil) and (FSQLRecord.FTransaction <> (FTransactionIntf as TFB30Transaction)) then RemoveMonitor(FSQLRecord.FTransaction); FOpen := False; FExecTransactionIntf := nil; @@ -1222,7 +1225,7 @@ begin end; constructor TFB30Statement.Create(Attachment: TFB30Attachment; - Transaction: ITransaction; sql: string; aSQLDialect: integer); + Transaction: ITransaction; sql: AnsiString; aSQLDialect: integer); begin inherited Create(Attachment,Transaction,sql,aSQLDialect); FSQLParams := TIBXINPUTSQLDA.Create(self); @@ -1231,7 +1234,7 @@ begin end; constructor TFB30Statement.CreateWithParameterNames( - Attachment: TFB30Attachment; Transaction: ITransaction; sql: string; + Attachment: TFB30Attachment; Transaction: ITransaction; sql: AnsiString; aSQLDialect: integer; GenerateParamNames: boolean); begin inherited CreateWithParameterNames(Attachment,Transaction,sql,aSQLDialect,GenerateParamNames); @@ -1304,7 +1307,7 @@ begin Result := TMetaData(GetInterface(1)); end; -function TFB30Statement.GetPlan: String; +function TFB30Statement.GetPlan: AnsiString; begin CheckHandle; if (not (FSQLStatementType in [SQLSelect, SQLSelectForUpdate,