瀏覽代碼

* More complete indexdef treatment

git-svn-id: trunk@11543 -
michael 17 年之前
父節點
當前提交
5a2da31729
共有 1 個文件被更改,包括 36 次插入0 次删除
  1. 36 0
      packages/fcl-db/src/datadict/fpdatadict.pp

+ 36 - 0
packages/fcl-db/src/datadict/fpdatadict.pp

@@ -141,6 +141,10 @@ Type
   Public
     Constructor Create(ATableName : String);
     Function AddDDIndexDef(AName : String) : TDDIndexDef;
+    function AddIndex (AName: String) : TDDIndexDef;
+    function IndexByName(AIndexName: String): TDDIndexDef;
+    function FindIndex(AIndexName: String): TDDIndexDef;
+    function IndexOfIndex(AIndexName: String): Integer;
     Property TableName : String Read FTableName Write SetTableName;
     Property Indexes[Index : Integer] : TDDIndexDef Read GetIndex Write SetIndex; default;
   end;
@@ -477,6 +481,7 @@ Const
 
 Resourcestring
   SErrFieldNotFound           = '"%s": Field "%s" not found.';
+  SErrIndexNotFound           = '"%s": Index "%s" not found.';
   SErrTableNotFound           = 'Table "%s" not found.';
   SErrDuplicateTableName      = 'Duplicate table name: "%s"';
   SErrDuplicateFieldName      = '"%s": Duplicate field name: "%s"';
@@ -997,6 +1002,7 @@ procedure TDDTableDef.SetTableName(const AValue: String);
 begin
   FTableName:=AValue;
   FFieldDefs.TableName:=AValue;
+  FIndexDefs.TableName:=AValue;
 end;
 
 function TDDTableDef.GetPrimaryKeyName: String;
@@ -2199,11 +2205,41 @@ begin
 end;
 
 function TDDIndexDefs.AddDDIndexDef(AName: String): TDDIndexDef;
+begin
+  result := AddIndex (AName);
+end;
+
+function TDDIndexDefs.AddIndex(AName: String): TDDIndexDef;
 begin
   Result:=Add as TDDIndexDef;
   Result.IndexName:=AName;
 end;
 
+function TDDIndexDefs.IndexOfIndex(AIndexName: String): Integer;
+begin
+  Result:=Count-1;
+  While (Result>=0) and (CompareText(GetIndex(Result).IndexName,AIndexName)<>0) do
+    Dec(Result)
+end;
+
+function TDDIndexDefs.FindIndex(AIndexName: String): TDDIndexDef;
+Var
+  I : integer;
+begin
+  I:=IndexOfIndex(AIndexName);
+  If (I=-1) then
+    Result:=Nil
+  else
+    Result:=GetIndex(I);
+end;
+
+function TDDIndexDefs.IndexByName(AIndexName: String): TDDIndexDef;
+begin
+  Result:=FindIndex(AIndexName);
+  If Result=Nil then
+    Raise EDatadict.CreateFmt(SErrIndexNotFound,[TableName,AIndexName]);
+end;
+
 initialization
 
 finalization