Ver código fonte

fcl-db: postgresql: increase max allowed string field length. Fix for existing test TTestFieldTypes.TestStringLargerThen8192.
(using MaxSamllint is inspired by Delphi dbExpress, where my tests shows, that max supported length is 32767 if used char/varchar with length above this limit various errors appears like "Invalid field size")

git-svn-id: trunk@23198 -

lacak 12 anos atrás
pai
commit
7e1dcce60b

+ 2 - 2
packages/fcl-db/src/sqldb/postgres/pqconnection.pp

@@ -407,7 +407,7 @@ begin
                                else
                                  size := (li-VARHDRSZ) and $FFFF;
                                end;
-                             if size > dsMaxStringSize then size := dsMaxStringSize;
+                             if size > MaxSmallint then size := MaxSmallint;
                              end;
 //    Oid_text               : Result := ftstring;
     Oid_text               : Result := ftMemo;
@@ -835,7 +835,7 @@ begin
             else
             begin
               li := pqgetlength(res,curtuple,x);
-              if li > dsMaxStringSize then li := dsMaxStringSize;
+              if li > FieldDef.Size then li := FieldDef.Size;
               Move(CurrBuff^, Buffer^, li);
             end;
           end;

+ 12 - 4
packages/fcl-db/tests/testfieldtypes.pas

@@ -1184,7 +1184,7 @@ begin
 end;
 
 procedure TTestFieldTypes.TestStringLargerThen8192;
-
+// See also: TestInsertLargeStrFields
 var
   s             : string;
   i             : integer;
@@ -1513,9 +1513,13 @@ begin
 end;
 
 procedure TTestFieldTypes.TestInsertLargeStrFields;
+// See also: TestStringLargerThen8192
 const
-  FieldValue='test1';
+  FieldValue1='test1';
+var
+  FieldValue2: string;
 begin
+  FieldValue2:=StringOfChar('t', 16000);
   with TSQLDBConnector(DBConnector) do
     begin
     Connection.ExecuteDirect('create table FPDEV2 (  ' +
@@ -1528,11 +1532,15 @@ begin
 
     query.sql.Text:='select * from FPDEV2';
     Query.Open;
-    Query.InsertRecord([1,FieldValue]);
+    Query.InsertRecord([1,FieldValue1]); // string length <= 8192 (dsMaxStringSize)
+    Query.InsertRecord([2,FieldValue2]); // string length >  8192 (dsMaxStringSize)
     Query.ApplyUpdates;
     Query.Close;
     Query.Open;
-    AssertEquals(FieldValue, Query.FieldByName('NAME').AsString);
+    AssertEquals(FieldValue1, Query.FieldByName('NAME').AsString);
+    Query.Next;
+    AssertEquals(length(FieldValue2), length(Query.FieldByName('NAME').AsString));
+    AssertEquals(FieldValue2, Query.FieldByName('NAME').AsString);
     Query.Close;
     end;
 end;