From 171193a675fecc651943e4488b0fda119dd2ad4d Mon Sep 17 00:00:00 2001 From: joost Date: Fri, 22 Aug 2008 12:49:29 +0000 Subject: [PATCH] * Fixed fixed-width char-parameters + test git-svn-id: trunk@11629 - --- .../fcl-db/src/sqldb/interbase/ibconnection.pp | 7 +++++++ packages/fcl-db/tests/testfieldtypes.pas | 15 ++++++++++++++- packages/fcl-db/tests/toolsunit.pas | 1 + 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/fcl-db/src/sqldb/interbase/ibconnection.pp b/packages/fcl-db/src/sqldb/interbase/ibconnection.pp index f1ddcaa458..04002a64f9 100644 --- a/packages/fcl-db/src/sqldb/interbase/ibconnection.pp +++ b/packages/fcl-db/src/sqldb/interbase/ibconnection.pp @@ -796,7 +796,14 @@ begin inc(CurrBuff,2); end else + begin + // The buffer-length is always VSQLVar^.sqllen, nothing more, nothing less + // so fill the complete buffer with valid data. Adding #0 will lead + // to problems, because the #0 will be seen as a part of the (binary) string CurrBuff := VSQLVar^.SQLData; + w := VSQLVar^.sqllen; + s := PadRight(s,w); + end; Move(s[1], CurrBuff^, w); end; SQL_TYPE_DATE, SQL_TYPE_TIME, SQL_TIMESTAMP : diff --git a/packages/fcl-db/tests/testfieldtypes.pas b/packages/fcl-db/tests/testfieldtypes.pas index 9c6e45d040..dacfe662f4 100644 --- a/packages/fcl-db/tests/testfieldtypes.pas +++ b/packages/fcl-db/tests/testfieldtypes.pas @@ -28,6 +28,7 @@ type procedure RunTest; override; published procedure TestClearUpdateableStatus; + procedure TestFixedStringParamQuery; procedure TestReadOnlyParseSQL; // bug 9254 procedure TestParseJoins; // bug 10148 procedure TestDoubleFieldNames; // bug 8457 @@ -700,6 +701,11 @@ begin TestXXParamQuery(ftString,'VARCHAR(10)',testValuesCount); end; +procedure TTestFieldTypes.TestFixedStringParamQuery; +begin + TestXXParamQuery(ftFixedChar,'CHAR(10)',testValuesCount); +end; + procedure TTestFieldTypes.TestDateParamQuery; begin @@ -731,6 +737,7 @@ begin case ADataType of ftInteger: Params.ParamByName('field1').asinteger := testIntValues[i]; ftFloat : Params.ParamByName('field1').AsFloat := testFloatValues[i]; + ftFixedChar, ftString : Params.ParamByName('field1').AsString := testStringValues[i]; ftDate : if cross then Params.ParamByName('field1').AsString:= testDateValues[i] @@ -753,7 +760,13 @@ begin case ADataType of ftInteger: AssertEquals(testIntValues[i],FieldByName('FIELD1').AsInteger); ftFloat : AssertEquals(testFloatValues[i],FieldByName('FIELD1').AsFloat); - ftString : AssertEquals(testStringValues[i],FieldByName('FIELD1').AsString); + ftFixedChar, + ftString : begin + if FieldByName('FIELD1').isnull then + AssertEquals(testStringValues[i],FieldByName('FIELD1').AsString) + else + AssertEquals(PadRight(testStringValues[i],10),FieldByName('FIELD1').AsString); + end; ftdate : AssertEquals(testDateValues[i],FormatDateTime('yyyy/mm/dd',FieldByName('FIELD1').AsDateTime)); else AssertTrue('no test for paramtype available',False); diff --git a/packages/fcl-db/tests/toolsunit.pas b/packages/fcl-db/tests/toolsunit.pas index db265ca5d9..64a1b921c0 100644 --- a/packages/fcl-db/tests/toolsunit.pas +++ b/packages/fcl-db/tests/toolsunit.pas @@ -231,6 +231,7 @@ var DBConnectorClass : TPersistentClass; i : integer; begin testValues[ftString] := testStringValues; + testValues[ftFixedChar] := testStringValues; testValues[ftDate] := testDateValues; for i := 0 to testValuesCount-1 do begin