Browse Source

* Detect multiple fields in primary key for sqlite + test, bug #16493

git-svn-id: trunk@15300 -
joost 15 years ago
parent
commit
a8ee8cdbb3

+ 3 - 3
packages/fcl-db/src/sqldb/sqlite/sqlite3conn.pp

@@ -675,12 +675,12 @@ begin
   if atablename <> '' then 
   if atablename <> '' then 
     begin
     begin
     ar1:= stringsquery('PRAGMA table_info('+atablename+');');
     ar1:= stringsquery('PRAGMA table_info('+atablename+');');
-    for int1:= 0 to high(ar1) do 
+    for int1:= 0 to high(ar1) do
       begin
       begin
       if (high(ar1[int1]) >= 5) and (ar1[int1][5] <> '0') then 
       if (high(ar1[int1]) >= 5) and (ar1[int1][5] <> '0') then 
         begin
         begin
-        result:= ar1[int1][1];
-        break;
+        if result<>'' then result := result+';';
+        result:= result+ar1[int1][1];
         end;
         end;
       end;
       end;
     end;
     end;

+ 21 - 0
packages/fcl-db/tests/testfieldtypes.pas

@@ -45,6 +45,7 @@ type
     procedure TestCrossStringDateParam;
     procedure TestCrossStringDateParam;
     procedure TestGetFieldNames;
     procedure TestGetFieldNames;
     procedure TestUpdateIndexDefs;
     procedure TestUpdateIndexDefs;
+    procedure TestMultipleFieldPKIndexDefs;
     procedure TestSetBlobAsMemoParam;
     procedure TestSetBlobAsMemoParam;
     procedure TestSetBlobAsBlobParam;
     procedure TestSetBlobAsBlobParam;
     procedure TestSetBlobAsStringParam;
     procedure TestSetBlobAsStringParam;
@@ -1587,6 +1588,26 @@ begin
   Asserttrue(ds.ServerIndexDefs[0].Options=[ixPrimary,ixUnique]);
   Asserttrue(ds.ServerIndexDefs[0].Options=[ixPrimary,ixUnique]);
 end;
 end;
 
 
+procedure TTestFieldTypes.TestMultipleFieldPKIndexDefs;
+var ds : TSQLQuery;
+begin
+  TSQLDBConnector(DBConnector).Connection.ExecuteDirect('create table FPDEV2 (' +
+                              '  ID1 INT NOT NULL,           ' +
+                              '  ID2 INT NOT NULL,           ' +
+                              '  NAME VARCHAR(50),           ' +
+                              '  PRIMARY KEY (ID1, ID2)      ' +
+                              ')                            ');
+  ds := TSQLDBConnector(DBConnector).Query;
+  ds.sql.Text:='select * from FPDEV2';
+  ds.Prepare;
+  ds.ServerIndexDefs.Update;
+  AssertEquals(1,ds.ServerIndexDefs.count);
+  writeln(ds.ServerIndexDefs[0].Fields);
+  AssertTrue(SameText('ID1;ID2',ds.ServerIndexDefs[0].Fields));
+  Asserttrue(ds.ServerIndexDefs[0].Options=[ixPrimary,ixUnique]);
+end;
+
+
 procedure TTestFieldTypes.TestSetBlobAsMemoParam;
 procedure TTestFieldTypes.TestSetBlobAsMemoParam;
 begin
 begin
   TestSetBlobAsParam(0);
   TestSetBlobAsParam(0);