Browse Source

* Improved tests from Lacak2, Mantis #20182

git-svn-id: trunk@20401 -
marco 13 years ago
parent
commit
8d6ed78b8e
1 changed files with 37 additions and 23 deletions
  1. 37 23
      packages/fcl-db/tests/testfieldtypes.pas

+ 37 - 23
packages/fcl-db/tests/testfieldtypes.pas

@@ -275,20 +275,28 @@ procedure TTestFieldTypes.TestNumeric;
 
 
 const
 const
   testValuesCount = 13;
   testValuesCount = 13;
-  testValues : Array[0..testValuesCount-1] of currency = (-123456.789,-10200,-10000,-1875.25,-10,-0.5,0,0.5,10,1875.25,10000,10200,123456.789);
-  Sizes: array [0..4] of integer = (4,0,3,5,0); //scale
+  testValues4 : Array[0..testValuesCount-1] of currency = (-99.99,-12.34,-10.2,-10,-0.5,-0.01,0,0.01,0.5,10,10.2,12.34,99.99);
+  testValues9 : Array[0..testValuesCount-1] of currency = (-123456.789,-10000,-1875.25,-10,-0.5,-0.001,0,0.001,0.5,10,1875.25,10000,123456.789);
+  FieldTypes: array [0..7] of TFieldType = (ftBCD, ftBCD, ftBCD, ftFmtBCD, ftLargeInt, ftFmtBCD, ftFmtBCD, ftFmtBCD);
+  FieldSizes: array [0..7] of integer = (4,2,3,5,0,3,5,0); //scale
 
 
 var
 var
-  i          : byte;
-  s          : string;
+  i,d        : integer;
+  s,s4,s9    : string;
+  t          : TFieldType;
 
 
 begin
 begin
   with TSQLDBConnector(DBConnector) do begin
   with TSQLDBConnector(DBConnector) do begin
     if SQLDbType = INTERBASE then
     if SQLDbType = INTERBASE then
-      s := '' //Interbase supports precision up to 18 only
+    begin
+      //Interbase internal storage of exact numeric data types based on precision:
+      // 1-4 (smallint), 5-9 (integer), 10-18 (int64)
+      s := ''; //Interbase supports precision up to 18 only
+      FieldTypes[5] := ftBCD; //ATM TIBConnection incorrectly maps NUMERIC(18,3) to ftBCD
+    end
     else
     else
-      s := ', N4 NUMERIC(19,0)';
-    Connection.ExecuteDirect('create table FPDEV2 (FT NUMERIC(18,4), N1 NUMERIC(18,0), N2 NUMERIC(18,3), N3 NUMERIC(18,5)' + s + ')');
+      s := ', N19_0 NUMERIC(19,0)';
+    Connection.ExecuteDirect('create table FPDEV2 (FT NUMERIC(18,4), N4_2 NUMERIC(4,2), N9_3 NUMERIC(9,3), N9_5 NUMERIC(9,5), N18_0 NUMERIC(18,0), N18_3 NUMERIC(18,3), N18_5 NUMERIC(18,5)' + s + ')');
     Transaction.CommitRetaining;
     Transaction.CommitRetaining;
 
 
     with Query do
     with Query do
@@ -296,18 +304,20 @@ begin
       SQL.Text := 'select * from FPDEV2';
       SQL.Text := 'select * from FPDEV2';
       Open;
       Open;
 
 
-      AssertEquals(sizeof(Currency), Fields[0].DataSize);
-      AssertTrue(Fields[0].DataType=ftBCD);
-      AssertEquals(Sizes[0], Fields[0].Size);
-
-      AssertTrue(Fields[1].DataType in [ftFmtBCD, ftLargeInt]);
-      AssertEquals(Sizes[1], Fields[1].Size);
-
-      for i := 2 to FieldCount-1 do
+      for i := 0 to FieldCount-1 do
       begin
       begin
-        AssertEquals(sizeof(TBCD), Fields[i].DataSize);
-        AssertTrue(Fields[i].DataType=ftFmtBCD);
-        AssertEquals(Sizes[i], Fields[i].Size);
+        case Fields[i].DataType of
+          ftBCD:      d := sizeof(Currency);
+          ftFmtBCD:   d := sizeof(TBCD);
+          ftLargeInt: d := sizeof(int64);
+          else        d := 0;
+        end;
+        t := FieldTypes[i];
+        if t = ftLargeInt then t := ftFmtBCD; //acceptable alternative
+
+        AssertEquals(Fields[i].DataSize, d);
+        AssertTrue(Fields[i].DataType in [FieldTypes[i], t]);
+        AssertEquals(Fields[i].Size, FieldSizes[i]);
       end;
       end;
 
 
       Close;
       Close;
@@ -315,8 +325,9 @@ begin
 
 
     for i := 0 to testValuesCount-1 do
     for i := 0 to testValuesCount-1 do
     begin
     begin
-      s :=CurrToStrF(testValues[i],ffFixed,3,DBConnector.FormatSettings);
-      Connection.ExecuteDirect(format('insert into FPDEV2 (FT,N2,N3) values (%s,%s,%s)', [s,s,s]));
+      s4 := CurrToStrF(testValues4[i],ffFixed,2,DBConnector.FormatSettings);
+      s9 := CurrToStrF(testValues9[i],ffFixed,3,DBConnector.FormatSettings);
+      Connection.ExecuteDirect(format('insert into FPDEV2 (N4_2,N9_5,FT,N9_3,N18_3,N18_5) values (%s,%s,%s,%s,%s,%s)', [s4,s4,s9,s9,s9,s9]));
     end;
     end;
 
 
     with Query do
     with Query do
@@ -324,9 +335,12 @@ begin
       Open;
       Open;
       for i := 0 to testValuesCount-1 do
       for i := 0 to testValuesCount-1 do
       begin
       begin
-        AssertEquals(testValues[i], Fields[0].AsCurrency);
-        AssertEquals(testValues[i], Fields[2].AsCurrency);
-        AssertEquals(testValues[i], Fields[3].AsCurrency);
+        AssertEquals(testValues4[i], Fields[1].AsCurrency);
+        AssertEquals(testValues4[i], Fields[3].AsCurrency);
+        AssertEquals(testValues9[i], Fields[0].AsCurrency);
+        AssertEquals(testValues9[i], Fields[2].AsCurrency);
+        AssertEquals(testValues9[i], Fields[5].AsCurrency);
+        AssertEquals(testValues9[i], Fields[6].AsCurrency);
         Next;
         Next;
       end;
       end;
       Close;
       Close;