From 5a2da317290a8dd82f29a909101ad7a9b0c1d7a1 Mon Sep 17 00:00:00 2001 From: michael Date: Mon, 11 Aug 2008 10:04:30 +0000 Subject: [PATCH] * More complete indexdef treatment git-svn-id: trunk@11543 - --- packages/fcl-db/src/datadict/fpdatadict.pp | 36 ++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/packages/fcl-db/src/datadict/fpdatadict.pp b/packages/fcl-db/src/datadict/fpdatadict.pp index 9583aefaf4..56505a549b 100644 --- a/packages/fcl-db/src/datadict/fpdatadict.pp +++ b/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