@@ -540,7 +540,8 @@ TDBConnection = class(TComponent)
540540 function UnescapeString (Text: String): String;
541541 function ExtractLiteral (var SQL: String; Prefix: String): String;
542542 function GetResults (SQL: String): TDBQuery;
543- function GetCol (SQL: String; Column: Integer=0 ): TStringList;
543+ // Query one column and return as StringList. Creates Name/Value pairs if NameColumn is 0 or greater.
544+ function GetCol (SQL: String; ValueColumn: Integer=0 ; NameColumn: Integer=-1 ): TStringList;
544545 function GetVar (SQL: String; Column: Integer=0 ): String; overload;
545546 function GetVar (SQL: String; Column: String): String; overload;
546547 function Ping (Reconnect: Boolean): Boolean; virtual ; abstract ;
@@ -5359,16 +5360,20 @@ function TDBConnection.FindObject(DB, Obj: String): TDBObject;
53595360end ;
53605361
53615362
5362- function TDBConnection.GetCol (SQL: String; Column : Integer=0 ): TStringList;
5363+ function TDBConnection.GetCol (SQL: String; ValueColumn : Integer=0 ; NameColumn: Integer=- 1 ): TStringList;
53635364var
53645365 Results: TDBQuery;
53655366begin
53665367 Results := GetResults(SQL);
53675368 Result := TStringList.Create;
5368- if Results.RecordCount > 0 then while not Results.Eof do begin
5369- Result.Add(Results.Col(Column));
5370- Results.Next;
5371- end ;
5369+ if Results.RecordCount > 0 then
5370+ while not Results.Eof do begin
5371+ if NameColumn < 0 then
5372+ Result.Add(Results.Col(ValueColumn))
5373+ else
5374+ Result.AddPair(Results.Col(NameColumn), Results.Col(ValueColumn));
5375+ Results.Next;
5376+ end ;
53725377 FreeResults(Results);
53735378end ;
53745379
@@ -6019,6 +6024,7 @@ function TMySQLConnection.GetTableKeys(Table: TDBObject): TTableKeyList;
60196024 KeyQuery, ColQuery: TDBQuery;
60206025 NewKey: TTableKey;
60216026 SizeQuery: String;
6027+ SizeByIndex: TStringList;
60226028begin
60236029 Result := TTableKeyList.Create(True);
60246030
@@ -6070,6 +6076,12 @@ function TMySQLConnection.GetTableKeys(Table: TDBObject): TTableKeyList;
60706076 end else begin
60716077
60726078 KeyQuery := GetResults(' SHOW KEYS FROM ' +QuoteIdent(Table.Name )+' FROM ' +QuoteIdent(Table.Database));
6079+ SizeByIndex := nil ;
6080+ if FSqlProvider.Has(qIndexSize) then try
6081+ SizeQuery := FSqlProvider.GetSql(qIndexSize, [EscapeString(Table.Database), EscapeString(Table.Name )]);
6082+ SizeByIndex := GetCol(SizeQuery, 1 , 0 );
6083+ except
6084+ end ;
60736085 NewKey := nil ;
60746086 while not KeyQuery.Eof do begin
60756087 if (not Assigned(NewKey)) or (NewKey.Name <> KeyQuery.Col(' Key_name' )) then begin
@@ -6098,17 +6110,9 @@ function TMySQLConnection.GetTableKeys(Table: TDBObject): TTableKeyList;
60986110 else if KeyQuery.ColumnExists(' Ignored' ) then // mariadb 10.6
60996111 NewKey.Visible := SameText(KeyQuery.Col(' Ignored' ), ' NO' );
61006112
6101- if FSqlProvider.Has(qIndexSize) then begin
6102- try
6103- SizeQuery := FSqlProvider.GetSql(qIndexSize, [
6104- EscapeString(Table.Database),
6105- EscapeString(Table.Name ),
6106- EscapeString(NewKey.Name )
6107- ]);
6108- NewKey.Size := StrToInt64Def(GetVar(SizeQuery), NewKey.Size);
6109- except
6110- end ;
6111- end ;
6113+ if Assigned(SizeByIndex) then
6114+ NewKey.Size := StrToInt64Def(SizeByIndex.Values[NewKey.Name ], NewKey.Size);
6115+
61126116 end ;
61136117
61146118 if KeyQuery.ColumnExists(' Expression' ) and (not KeyQuery.IsNull(' Expression' )) then begin
0 commit comments