mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-26 11:17:57 +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,
|
||||
spSessionVariables, spGlobalVariables,
|
||||
spISTableSchemaCol,
|
||||
spUSEQuery, spKillQuery);
|
||||
spUSEQuery, spKillQuery,
|
||||
spFuncLength, spFuncCeil);
|
||||
|
||||
TDBConnection = class(TComponent)
|
||||
private
|
||||
@ -2005,6 +2006,8 @@ begin
|
||||
FSQLSpecifities[spISTableSchemaCol] := 'TABLE_SCHEMA';
|
||||
FSQLSpecifities[spUSEQuery] := 'USE %s';
|
||||
FSQLSpecifities[spKillQuery] := 'KILL %d';
|
||||
FSQLSpecifities[spFuncLength] := 'LENGTH';
|
||||
FSQLSpecifities[spFuncCeil] := 'CEIL';
|
||||
end;
|
||||
ngMSSQL: begin
|
||||
FSQLSpecifities[spEmptyTable] := 'DELETE FROM ';
|
||||
@ -2018,6 +2021,8 @@ begin
|
||||
FSQLSpecifities[spISTableSchemaCol] := 'TABLE_CATALOG';
|
||||
FSQLSpecifities[spUSEQuery] := 'USE %s';
|
||||
FSQLSpecifities[spKillQuery] := 'KILL %d';
|
||||
FSQLSpecifities[spFuncLength] := 'LEN';
|
||||
FSQLSpecifities[spFuncCeil] := 'CEILING';
|
||||
end;
|
||||
ngPgSQL: begin
|
||||
FSQLSpecifities[spEmptyTable] := 'DELETE FROM ';
|
||||
@ -2031,6 +2036,8 @@ begin
|
||||
FSQLSpecifities[spISTableSchemaCol] := 'table_schema';
|
||||
FSQLSpecifities[spUSEQuery] := 'SET search_path TO %s';
|
||||
FSQLSpecifities[spKillQuery] := 'SELECT pg_cancel_backend(%d)';
|
||||
FSQLSpecifities[spFuncLength] := 'LENGTH';
|
||||
FSQLSpecifities[spFuncCeil] := 'CEIL';
|
||||
end;
|
||||
|
||||
end;
|
||||
|
@ -795,18 +795,21 @@ procedure TfrmTableTools.DoFind(DBObj: TDBObject);
|
||||
var
|
||||
Columns: TTableColumnList;
|
||||
Col: TTableColumn;
|
||||
SQL, Dummy, Column, RoutineDefinitionColumn, FindText, FindTextJokers: String;
|
||||
SQL, Dummy, Column, RoutineDefinitionColumn, RoutineSchemaColumn, FindText, FindTextJokers: String;
|
||||
begin
|
||||
FFindSeeResultSQL.Add('');
|
||||
|
||||
FindText := memoFindText.Text;
|
||||
FindTextJokers := '%'+FindText+'%';
|
||||
RoutineDefinitionColumn := DBObj.Connection.QuoteIdent('ROUTINE_DEFINITION');
|
||||
RoutineDefinitionColumn := DBObj.Connection.QuoteIdent('routine_definition');
|
||||
if not chkCaseSensitive.Checked then begin
|
||||
FindText := LowerCase(FindText);
|
||||
FindTextJokers := LowerCase(FindTextJokers);
|
||||
RoutineDefinitionColumn := 'LOWER('+RoutineDefinitionColumn+')';
|
||||
end;
|
||||
RoutineSchemaColumn := 'routine_schema';
|
||||
if DBObj.Connection.Parameters.IsMSSQL then
|
||||
RoutineSchemaColumn := 'routine_catalog';
|
||||
|
||||
Columns := TTableColumnList.Create(True);
|
||||
case DBObj.NodeType of
|
||||
@ -866,17 +869,17 @@ begin
|
||||
end;
|
||||
|
||||
lntProcedure, lntFunction: begin
|
||||
if DBObj.Connection.InformationSchemaObjects.IndexOf('ROUTINES') > -1 then begin
|
||||
if DBObj.Connection.InformationSchemaObjects.IndexOf('routines') > -1 then begin
|
||||
SQL := 'SELECT '+
|
||||
esc(DBObj.Database)+' AS '+DBObj.Connection.QuoteIdent('Database')+', '+
|
||||
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')+
|
||||
'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);
|
||||
'FROM '+DBObj.Connection.QuoteIdent('information_schema')+'.'+DBObj.Connection.QuoteIdent('routines')+' '+
|
||||
'WHERE '+DBObj.Connection.QuoteIdent(RoutineSchemaColumn)+'='+esc(DBObj.Database)+' AND '+DBObj.Connection.QuoteIdent('routine_name')+'='+esc(DBObj.Name);
|
||||
AddResults(SQL, DBObj.Connection);
|
||||
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;
|
||||
|
||||
|
Reference in New Issue
Block a user