Implement TDBConnection.GetServerVariables, and use that in various places. Also, indicate Percona server version using version_comment variable. See http://www.heidisql.com/forum.php?t=8035 .

This commit is contained in:
Ansgar Becker
2011-08-19 06:27:00 +00:00
parent da96a7c412
commit eaadfb3f60
4 changed files with 105 additions and 72 deletions

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 721 B

View File

@@ -322,6 +322,7 @@ type
function NetTypeName(NetType: TNetType; LongFormat: Boolean): String;
function GetNetTypeGroup: TNetTypeGroup;
function IsMariaDB: Boolean;
function IsPercona: Boolean;
property ImageIndex: Integer read GetImageIndex;
published
property NetType: TNetType read FNetType write FNetType;
@@ -443,6 +444,7 @@ type
function ConnectionInfo: TStringList;
function GetLastResults: TDBQueryList; virtual; abstract;
function GetCreateCode(Database, Name: String; NodeType: TListNodeType): String; virtual; abstract;
function GetServerVariables: TDBQuery; virtual; abstract;
procedure ClearDbObjects(db: String);
procedure ClearAllDbObjects;
procedure ParseTableStructure(CreateTable: String; Columns: TTableColumnList; Keys: TTableKeyList; ForeignKeys: TForeignKeyList);
@@ -524,6 +526,7 @@ type
function GetLastResults: TDBQueryList; override;
function GetCreateCode(Database, Name: String; NodeType: TListNodeType): String; override;
property LastRawResults: TMySQLRawResults read FLastRawResults;
function GetServerVariables: TDBQuery; override;
end;
TAdoRawResults = Array of _RecordSet;
@@ -552,6 +555,7 @@ type
function GetDBObjects(db: String; Refresh: Boolean=False): TDBObjectList; override;
function GetLastResults: TDBQueryList; override;
function GetCreateCode(Database, Name: String; NodeType: TListNodeType): String; override;
function GetServerVariables: TDBQuery; override;
property LastRawResults: TAdoRawResults read FLastRawResults;
end;
@@ -767,6 +771,8 @@ var
begin
if IsMariaDB then
My := 'MariaDB'
else if IsPercona then
My := 'Percona'
else
My := 'MySQL';
if LongFormat then case NetType of
@@ -814,6 +820,12 @@ begin
end;
function TConnectionParameters.IsPercona: Boolean;
begin
Result := Pos('percona server', LowerCase(ServerVersion)) > 0;
end;
function TConnectionParameters.GetImageIndex: Integer;
begin
case NetTypeGroup of
@@ -821,6 +833,8 @@ begin
Result := 164;
if IsMariaDB then
Result := 166;
if IsPercona then
Result := 169;
end;
ngMSSQL: Result := 123;
else Result := ICONINDEX_SERVER;
@@ -953,6 +967,7 @@ var
ExitCode: LongWord;
sslca, sslkey, sslcert: PAnsiChar;
DoSSL, SSLsettingsComplete: Boolean;
Vars: TDBQuery;
begin
// Init library
if libmysql_handle = 0 then begin
@@ -1104,8 +1119,16 @@ begin
FConnectionStarted := GetTickCount div 1000;
FServerStarted := FConnectionStarted - StrToIntDef(GetVar('SHOW STATUS LIKE ''Uptime''', 1), 1);
FServerVersionUntouched := DecodeAPIString(mysql_get_server_info(FHandle));
FServerOS := GetVar('SHOW VARIABLES LIKE ' + EscapeString('version_compile_os'), 1);
FRealHostname := GetVar('SHOW VARIABLES LIKE ' + EscapeString('hostname'), 1);
Vars := GetServerVariables;
while not Vars.Eof do begin
if Vars.Col(0) = 'version_compile_os' then
FServerOS := Vars.Col(1);
if Vars.Col(0) = 'hostname' then
FRealHostname := Vars.Col(1);
if (Vars.Col(0) = 'version_comment') and (Vars.Col(1) <> '') then
FServerVersionUntouched := FServerVersionUntouched + ' - ' + Vars.Col(1);
Vars.Next;
end;
DoAfterConnect;
if FDatabase <> '' then begin
tmpdb := FDatabase;
@@ -2038,9 +2061,9 @@ end;
function TMySQLConnection.GetTableEngines: TStringList;
var
ShowEngines, HaveEngines: TDBQuery;
Results: TDBQuery;
engineName, engineSupport: String;
PossibleEngines: TStringList;
rx: TRegExpr;
begin
// After a disconnect Ping triggers the cached engines to be reset
Log(lcDebug, 'Fetching list of table engines ...');
@@ -2048,42 +2071,38 @@ begin
if not Assigned(FTableEngines) then begin
FTableEngines := TStringList.Create;
try
ShowEngines := GetResults('SHOW ENGINES');
while not ShowEngines.Eof do begin
engineName := ShowEngines.Col('Engine');
engineSupport := LowerCase(ShowEngines.Col('Support'));
Results := GetResults('SHOW ENGINES');
while not Results.Eof do begin
engineName := Results.Col('Engine');
engineSupport := LowerCase(Results.Col('Support'));
// Add to dropdown if supported
if (engineSupport = 'yes') or (engineSupport = 'default') then
FTableEngines.Add(engineName);
// Check if this is the default engine
if engineSupport = 'default' then
FTableEngineDefault := engineName;
ShowEngines.Next;
Results.Next;
end;
Results.Free;
except
// Ignore errors on old servers and try a fallback:
// Manually fetch available engine types by analysing have_* options
// This is for servers below 4.1 or when the SHOW ENGINES statement has
// failed for some other reason
HaveEngines := GetResults('SHOW VARIABLES LIKE ''have%''');
Results := GetServerVariables;
// Add default engines which will not show in a have_* variable:
FTableEngines.CommaText := 'MyISAM,MRG_MyISAM,HEAP';
FTableEngineDefault := 'MyISAM';
// Possible other engines:
PossibleEngines := TStringList.Create;
PossibleEngines.CommaText := 'ARCHIVE,BDB,BLACKHOLE,CSV,EXAMPLE,FEDERATED,INNODB,ISAM';
while not HaveEngines.Eof do begin
engineName := copy(HaveEngines.Col(0), 6, Length(HaveEngines.Col(0)));
// Strip additional "_engine" suffix, fx from "have_blackhole_engine"
if Pos('_', engineName) > 0 then
engineName := copy(engineName, 0, Pos('_', engineName)-1);
engineName := UpperCase(engineName);
// Add engine to list if it's a) in HaveEngineList and b) activated
if (PossibleEngines.IndexOf(engineName) > -1)
and (LowerCase(HaveEngines.Col(1)) = 'yes') then
FTableEngines.Add(engineName);
HaveEngines.Next;
rx := TRegExpr.Create;
rx.ModifierI := True;
rx.Expression := '^have_(ARCHIVE|BDB|BLACKHOLE|CSV|EXAMPLE|FEDERATED|INNODB|ISAM)(_engine)?$';
while not Results.Eof do begin
if rx.Exec(Results.Col(0)) and (LowerCase(Results.Col(1)) = 'yes') then
FTableEngines.Add(UpperCase(rx.Match[1]));
Results.Next;
end;
rx.Free;
Results.Free;
end;
end;
Result := FTableEngines;
@@ -2180,6 +2199,20 @@ begin
end;
function TMySQLConnection.GetServerVariables: TDBQuery;
begin
// Return server variables
Result := GetResults('SHOW VARIABLES');
end;
function TAdoDBConnection.GetServerVariables: TDBQuery;
begin
// Enumerate some config values on MS SQL
Result := GetResults('SELECT '+QuoteIdent('comment')+', '+QuoteIdent('value')+' FROM '+QuoteIdent('master')+'.'+QuoteIdent('dbo')+'.'+QuoteIdent('syscurconfigs')+' ORDER BY '+QuoteIdent('comment'));
end;
function TDBConnection.GetInformationSchemaObjects: TStringList;
var
Objects: TDBObjectList;

View File

@@ -2612,133 +2612,133 @@ object MainForm: TMainForm
Left = 104
Top = 160
Bitmap = {
494C0101A90050019C0110001000FFFFFFFF2110FFFFFFFFFFFFFFFF424D3600
494C0101AA005001B00110001000FFFFFFFF2110FFFFFFFFFFFFFFFF424D3600
000000000000360000002800000040000000B0020000010020000000000000B0
0200000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000081A205D0C3745870000
0112000001120732448703171F5D000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000020E44020E4A98031467B3031364B1020C3E8C00030F460000
0008000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000051013484BCFF7FF21B1
DEF31BADDDF331C2F4FF010E1348000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
DEF31BADDDF331C2F4FF010E1348000000000000000000000000000000030000
03230000000003115AA70628D1FF0628D1FF0628D1FF0628D1FF0628CFFE041A
8AD000020D410000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000206072D4AD0F7FF82DE
F9FF78D9F9FF2AC0F4FF0005072D000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
F9FF78D9F9FF2AC0F4FF0005072D000000000000000000000004020F4F9D010D
42910000000003115AA70628D1FF0628D1FF0628D1FF0628D1FF0628D1FF0628
D1FF0626C5F80107246B00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000003266577B172DAF8FF8BE0
FAFF82DDF9FF52D0F6FF0D5975B1000000030000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
FAFF82DDF9FF52D0F6FF0D5975B10000000300000000020A35810628D1FF010D
43920000000003115AA7051C93D603115AA7031362AF0521AAE60628D1FF0628
D1FF0628D1FF0627C9FA00031048000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000224E599968D8F9FF71DAF8FF8AE0
FAFF81DDF9FF4FCEF7FF30C2F4FF094157990000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
FAFF81DDF9FF4FCEF7FF30C2F4FF094157990001062C0625C1F50628D1FF010D
4392000000000000052A0000000600000000000000000000000E010C3E8C0628
CDFD0628D1FF0628D1FF051C93D60000000A0000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000009050D0F3F1538428464D7
F8FF57D2F8FF0A364587010B0E3F000000090000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
F8FF57D2F8FF0A364587010B0E3F00000009020D43910628D1FF0628D1FF010D
4392000000000000000004171D5816647FB7135970AC020A0D3C00000002020D
47950628D1FF0628D1FF0628D1FF000416530000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000002F81
99C9267F99C90000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
99C9267F99C9000000000000000000000000051D96D80628D1FF0628D1FF010D
43920000000004151A5429BEF2FC2AC3F8FF2AC3F8FF26B1E0F3010406280000
01170627CAFB0628D1FF0628D1FF020E48960000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000050D
1042040D10420000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
1042040D10420000000000000000000000000628C9FA0629D1FF0629D1FF020D
449200000000135C75B02AC3F8FF2AC3F8FF2AC3F8FF2AC3F8FF092D397B0000
0000041D92D50629D1FF0629D1FF03156BB70000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000934CDFA0A37D5FF0A37D5FF0313
4A970000000011526CA92AC3F8FF2AC3F8FF2AC3F8FF2AC3F8FF082732740000
0000062694D50A37D5FF0A37D5FF051B6EB70000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000A349CD80E4ADAFF0E4ADAFF0932
91D00000000102090C3B26AFE1F42AC3F8FF2AC3F8FF2096C3E3000101170000
01150E48D1FA0E4ADAFF0E4ADAFF04194C970000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000051D4892125DDEFF125DDEFF125D
DEFF020B195600000000010608300A314385092A387B0002031D00000002061E
4892125DDEFF125DDEFF125DDEFF010917540000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000003072E1666D3F61770E3FF1770
E3FF1564CBF1030E1C5B0000000500000000000000000000000D06214189176E
DDFC1770E3FF1770E3FF104EA2D80000000B0000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000006213D841B84E8FF1B84
E8FF1B84E8FF1B84E8FF135BA0D40C3861A50D3D69AC1669B9E41B84E8FF1B84
E8FF1B84E8FF1B7FE0FB020A134A000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000050B375CA02094
EBFE2097EDFF2097EDFF2097EDFF2097EDFF2097EDFF2097EDFF2097EDFF2097
EDFF1E8EE0F905192B6E00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000003051B
296B1D88C6E824AAF2FF24AAF2FF24AAF2FF24AAF2FF24AAF2FF24A7F0FE186F
A3D2020A10440000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000011304151E5B0D3F589A13597BB5125676B20B364C8F020D13490000
0008000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000

View File

@@ -8002,7 +8002,7 @@ begin
FreeAndNil(Results);
Screen.Cursor := crHourglass;
if vt = ListVariables then begin
Results := Conn.GetResults('SHOW VARIABLES');
Results := Conn.GetServerVariables;
end else if vt = ListStatus then begin
Results := Conn.GetResults('SHOW /*!50002 GLOBAL */ STATUS');
FStatusServerUptime := Conn.ServerUptime;