@@ -548,7 +548,8 @@ TDBConnection = class(TComponent)
548548 function UnescapeString (Text: String): String;
549549 function ExtractLiteral (var SQL: String; Prefix: String): String;
550550 function GetResults (SQL: String): TDBQuery;
551- function GetCol (SQL: String; Column: Integer=0 ): TStringList;
551+ // Query one column and return as StringList. Creates Name/Value pairs if NameColumn is 0 or greater.
552+ function GetCol (SQL: String; ValueColumn: Integer=0 ; NameColumn: Integer=-1 ): TStringList;
552553 function GetVar (SQL: String; Column: Integer=0 ): String; overload;
553554 function GetVar (SQL: String; Column: String): String; overload;
554555 function Ping (Reconnect: Boolean): Boolean; virtual ; abstract ;
@@ -5527,16 +5528,20 @@ function TDBConnection.FindObject(DB, Obj: String): TDBObject;
55275528end ;
55285529
55295530
5530- function TDBConnection.GetCol (SQL: String; Column : Integer=0 ): TStringList;
5531+ function TDBConnection.GetCol (SQL: String; ValueColumn : Integer=0 ; NameColumn: Integer=- 1 ): TStringList;
55315532var
55325533 Results: TDBQuery;
55335534begin
55345535 Results := GetResults(SQL);
55355536 Result := TStringList.Create;
5536- if Results.RecordCount > 0 then while not Results.Eof do begin
5537- Result.Add(Results.Col(Column));
5538- Results.Next;
5539- end ;
5537+ if Results.RecordCount > 0 then
5538+ while not Results.Eof do begin
5539+ if NameColumn < 0 then
5540+ Result.Add(Results.Col(ValueColumn))
5541+ else
5542+ Result.AddPair(Results.Col(NameColumn), Results.Col(ValueColumn));
5543+ Results.Next;
5544+ end ;
55405545 FreeResults(Results);
55415546end ;
55425547
@@ -6177,6 +6182,7 @@ function TMySQLConnection.GetTableKeys(Table: TDBObject): TTableKeyList;
61776182 KeyQuery, ColQuery: TDBQuery;
61786183 NewKey: TTableKey;
61796184 SizeQuery: String;
6185+ SizeByIndex: TStringList;
61806186begin
61816187 Result := TTableKeyList.Create(True);
61826188
@@ -6228,6 +6234,12 @@ function TMySQLConnection.GetTableKeys(Table: TDBObject): TTableKeyList;
62286234 end else begin
62296235
62306236 KeyQuery := GetResults(' SHOW KEYS FROM ' +QuoteIdent(Table.Name )+' FROM ' +QuoteIdent(Table.Database));
6237+ SizeByIndex := nil ;
6238+ if FSqlProvider.Has(qIndexSize) then try
6239+ SizeQuery := FSqlProvider.GetSql(qIndexSize, [EscapeString(Table.Database), EscapeString(Table.Name )]);
6240+ SizeByIndex := GetCol(SizeQuery, 1 , 0 );
6241+ except
6242+ end ;
62316243 NewKey := nil ;
62326244 while not KeyQuery.Eof do begin
62336245 if (not Assigned(NewKey)) or (NewKey.Name <> KeyQuery.Col(' Key_name' )) then begin
@@ -6256,17 +6268,9 @@ function TMySQLConnection.GetTableKeys(Table: TDBObject): TTableKeyList;
62566268 else if KeyQuery.ColumnExists(' Ignored' ) then // mariadb 10.6
62576269 NewKey.Visible := SameText(KeyQuery.Col(' Ignored' ), ' NO' );
62586270
6259- if FSqlProvider.Has(qIndexSize) then begin
6260- try
6261- SizeQuery := FSqlProvider.GetSql(qIndexSize, [
6262- EscapeString(Table.Database),
6263- EscapeString(Table.Name ),
6264- EscapeString(NewKey.Name )
6265- ]);
6266- NewKey.Size := StrToInt64Def(GetVar(SizeQuery), NewKey.Size);
6267- except
6268- end ;
6269- end ;
6271+ if Assigned(SizeByIndex) then
6272+ NewKey.Size := StrToInt64Def(SizeByIndex.Values[NewKey.Name ], NewKey.Size);
6273+
62706274 end ;
62716275
62726276 if KeyQuery.ColumnExists(' Expression' ) and (not KeyQuery.IsNull(' Expression' )) then begin
0 commit comments