mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-26 20:00:16 +08:00
Support searching in procedures and functions on MSSQL and PostgreSQL mode too.
This commit is contained in:
@ -284,7 +284,8 @@ type
|
|||||||
spAddColumn, spChangeColumn,
|
spAddColumn, spChangeColumn,
|
||||||
spSessionVariables, spGlobalVariables,
|
spSessionVariables, spGlobalVariables,
|
||||||
spISTableSchemaCol,
|
spISTableSchemaCol,
|
||||||
spUSEQuery, spKillQuery);
|
spUSEQuery, spKillQuery,
|
||||||
|
spFuncLength, spFuncCeil);
|
||||||
|
|
||||||
TDBConnection = class(TComponent)
|
TDBConnection = class(TComponent)
|
||||||
private
|
private
|
||||||
@ -2005,6 +2006,8 @@ begin
|
|||||||
FSQLSpecifities[spISTableSchemaCol] := 'TABLE_SCHEMA';
|
FSQLSpecifities[spISTableSchemaCol] := 'TABLE_SCHEMA';
|
||||||
FSQLSpecifities[spUSEQuery] := 'USE %s';
|
FSQLSpecifities[spUSEQuery] := 'USE %s';
|
||||||
FSQLSpecifities[spKillQuery] := 'KILL %d';
|
FSQLSpecifities[spKillQuery] := 'KILL %d';
|
||||||
|
FSQLSpecifities[spFuncLength] := 'LENGTH';
|
||||||
|
FSQLSpecifities[spFuncCeil] := 'CEIL';
|
||||||
end;
|
end;
|
||||||
ngMSSQL: begin
|
ngMSSQL: begin
|
||||||
FSQLSpecifities[spEmptyTable] := 'DELETE FROM ';
|
FSQLSpecifities[spEmptyTable] := 'DELETE FROM ';
|
||||||
@ -2018,6 +2021,8 @@ begin
|
|||||||
FSQLSpecifities[spISTableSchemaCol] := 'TABLE_CATALOG';
|
FSQLSpecifities[spISTableSchemaCol] := 'TABLE_CATALOG';
|
||||||
FSQLSpecifities[spUSEQuery] := 'USE %s';
|
FSQLSpecifities[spUSEQuery] := 'USE %s';
|
||||||
FSQLSpecifities[spKillQuery] := 'KILL %d';
|
FSQLSpecifities[spKillQuery] := 'KILL %d';
|
||||||
|
FSQLSpecifities[spFuncLength] := 'LEN';
|
||||||
|
FSQLSpecifities[spFuncCeil] := 'CEILING';
|
||||||
end;
|
end;
|
||||||
ngPgSQL: begin
|
ngPgSQL: begin
|
||||||
FSQLSpecifities[spEmptyTable] := 'DELETE FROM ';
|
FSQLSpecifities[spEmptyTable] := 'DELETE FROM ';
|
||||||
@ -2031,6 +2036,8 @@ begin
|
|||||||
FSQLSpecifities[spISTableSchemaCol] := 'table_schema';
|
FSQLSpecifities[spISTableSchemaCol] := 'table_schema';
|
||||||
FSQLSpecifities[spUSEQuery] := 'SET search_path TO %s';
|
FSQLSpecifities[spUSEQuery] := 'SET search_path TO %s';
|
||||||
FSQLSpecifities[spKillQuery] := 'SELECT pg_cancel_backend(%d)';
|
FSQLSpecifities[spKillQuery] := 'SELECT pg_cancel_backend(%d)';
|
||||||
|
FSQLSpecifities[spFuncLength] := 'LENGTH';
|
||||||
|
FSQLSpecifities[spFuncCeil] := 'CEIL';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end;
|
end;
|
||||||
|
@ -795,18 +795,21 @@ procedure TfrmTableTools.DoFind(DBObj: TDBObject);
|
|||||||
var
|
var
|
||||||
Columns: TTableColumnList;
|
Columns: TTableColumnList;
|
||||||
Col: TTableColumn;
|
Col: TTableColumn;
|
||||||
SQL, Dummy, Column, RoutineDefinitionColumn, FindText, FindTextJokers: String;
|
SQL, Dummy, Column, RoutineDefinitionColumn, RoutineSchemaColumn, FindText, FindTextJokers: String;
|
||||||
begin
|
begin
|
||||||
FFindSeeResultSQL.Add('');
|
FFindSeeResultSQL.Add('');
|
||||||
|
|
||||||
FindText := memoFindText.Text;
|
FindText := memoFindText.Text;
|
||||||
FindTextJokers := '%'+FindText+'%';
|
FindTextJokers := '%'+FindText+'%';
|
||||||
RoutineDefinitionColumn := DBObj.Connection.QuoteIdent('ROUTINE_DEFINITION');
|
RoutineDefinitionColumn := DBObj.Connection.QuoteIdent('routine_definition');
|
||||||
if not chkCaseSensitive.Checked then begin
|
if not chkCaseSensitive.Checked then begin
|
||||||
FindText := LowerCase(FindText);
|
FindText := LowerCase(FindText);
|
||||||
FindTextJokers := LowerCase(FindTextJokers);
|
FindTextJokers := LowerCase(FindTextJokers);
|
||||||
RoutineDefinitionColumn := 'LOWER('+RoutineDefinitionColumn+')';
|
RoutineDefinitionColumn := 'LOWER('+RoutineDefinitionColumn+')';
|
||||||
end;
|
end;
|
||||||
|
RoutineSchemaColumn := 'routine_schema';
|
||||||
|
if DBObj.Connection.Parameters.IsMSSQL then
|
||||||
|
RoutineSchemaColumn := 'routine_catalog';
|
||||||
|
|
||||||
Columns := TTableColumnList.Create(True);
|
Columns := TTableColumnList.Create(True);
|
||||||
case DBObj.NodeType of
|
case DBObj.NodeType of
|
||||||
@ -866,17 +869,17 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
lntProcedure, lntFunction: begin
|
lntProcedure, lntFunction: begin
|
||||||
if DBObj.Connection.InformationSchemaObjects.IndexOf('ROUTINES') > -1 then begin
|
if DBObj.Connection.InformationSchemaObjects.IndexOf('routines') > -1 then begin
|
||||||
SQL := 'SELECT '+
|
SQL := 'SELECT '+
|
||||||
esc(DBObj.Database)+' AS '+DBObj.Connection.QuoteIdent('Database')+', '+
|
esc(DBObj.Database)+' AS '+DBObj.Connection.QuoteIdent('Database')+', '+
|
||||||
esc(DBObj.Name)+' AS '+DBObj.Connection.QuoteIdent('Table')+', '+
|
esc(DBObj.Name)+' AS '+DBObj.Connection.QuoteIdent('Table')+', '+
|
||||||
'CEIL((LENGTH('+RoutineDefinitionColumn+') - LENGTH(REPLACE('+RoutineDefinitionColumn+', '+esc(FindText)+', '+esc('')+'))) / LENGTH('+esc(FindText)+')) AS '+DBObj.Connection.QuoteIdent('Found rows')+', '+
|
DBObj.Connection.GetSQLSpecifity(spFuncCeil)+'(('+DBObj.Connection.GetSQLSpecifity(spFuncLength)+'('+RoutineDefinitionColumn+') - '+DBObj.Connection.GetSQLSpecifity(spFuncLength)+'(REPLACE('+RoutineDefinitionColumn+', '+esc(FindText)+', '+esc('')+'))) / '+DBObj.Connection.GetSQLSpecifity(spFuncLength)+'('+esc(FindText)+')) AS '+DBObj.Connection.QuoteIdent('Found rows')+', '+
|
||||||
'0 AS '+DBObj.Connection.QuoteIdent('Relevance')+
|
'0 AS '+DBObj.Connection.QuoteIdent('Relevance')+
|
||||||
'FROM '+DBObj.Connection.QuoteIdent('INFORMATION_SCHEMA')+'.'+DBObj.Connection.QuoteIdent('ROUTINES')+' '+
|
'FROM '+DBObj.Connection.QuoteIdent('information_schema')+'.'+DBObj.Connection.QuoteIdent('routines')+' '+
|
||||||
'WHERE '+DBObj.Connection.QuoteIdent('ROUTINE_SCHEMA')+'='+esc(DBObj.Database)+' AND '+DBObj.Connection.QuoteIdent('ROUTINE_NAME')+'='+esc(DBObj.Name);
|
'WHERE '+DBObj.Connection.QuoteIdent(RoutineSchemaColumn)+'='+esc(DBObj.Database)+' AND '+DBObj.Connection.QuoteIdent('routine_name')+'='+esc(DBObj.Name);
|
||||||
AddResults(SQL, DBObj.Connection);
|
AddResults(SQL, DBObj.Connection);
|
||||||
end else begin
|
end else begin
|
||||||
AddNotes(DBObj, f_('%s%s missing.', [STRSKIPPED, 'INFORMATION_SCHEMA.ROUTINES']), '');
|
AddNotes(DBObj, f_('%s%s missing.', [STRSKIPPED, 'information_schema.routines']), '');
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user