Browse Source

Simplify query storage in querywindow a bit. Use http://wiki.lazarus.freepascal.org/DebugServer instead of LazLogger for logging as it's probably more suited for multithreaded applications

Reinier Olislagers 11 years ago
parent
commit
628d298a91
2 changed files with 52 additions and 29 deletions
  1. 6 4
      main.pas
  2. 46 25
      querywindow.pas

+ 6 - 4
main.pas

@@ -7,8 +7,7 @@ interface
 uses
 uses
   Classes, SysUtils, IBConnection, sqldb, memds, FileUtil, LResources, Forms,
   Classes, SysUtils, IBConnection, sqldb, memds, FileUtil, LResources, Forms,
   Controls, Graphics, Dialogs, Menus, ComCtrls, Reg, QueryWindow, Grids,
   Controls, Graphics, Dialogs, Menus, ComCtrls, Reg, QueryWindow, Grids,
-  ExtCtrls, Buttons, StdCtrls, TableManage
-  {$IFDEF DEBUG},lazlogger{$ENDIF};
+  ExtCtrls, Buttons, StdCtrls, TableManage,dbugintf;
 
 
 {$i turbocommon.inc}
 {$i turbocommon.inc}
 
 
@@ -287,6 +286,10 @@ end;
 
 
 procedure TfmMain.FormCreate(Sender: TObject);
 procedure TfmMain.FormCreate(Sender: TObject);
 begin
 begin
+  {$IFNDEF DEBUG}
+  // Do not log to debug server if built as release instead of debug
+  SetDebuggingEnabled(false);
+  {$ENDIF}
   Application.OnException:= @GlobalException;
   Application.OnException:= @GlobalException;
   fActivated:= False;
   fActivated:= False;
   LoadRegisteredDatabases;
   LoadRegisteredDatabases;
@@ -1402,8 +1405,7 @@ begin
     detRollBack: Source:='Rollback: ';
     detRollBack: Source:='Rollback: ';
     else Source:='Unknown event. Please fix program code.';
     else Source:='Unknown event. Please fix program code.';
   end;
   end;
-  debugln(Source + Msg);
-  sleep(100);
+  SendDebug(Source + Msg);
 end;
 end;
 
 
 
 

+ 46 - 25
querywindow.pas

@@ -8,8 +8,8 @@ uses
   Classes, SysUtils, IBConnection, db, sqldb, FileUtil, LResources, Forms,
   Classes, SysUtils, IBConnection, db, sqldb, FileUtil, LResources, Forms,
   Controls, Graphics, Dialogs, ExtCtrls, PairSplitter, StdCtrls, Buttons,
   Controls, Graphics, Dialogs, ExtCtrls, PairSplitter, StdCtrls, Buttons,
   DBGrids, Menus, ComCtrls, SynEdit, SynHighlighterSQL, Reg,
   DBGrids, Menus, ComCtrls, SynEdit, SynHighlighterSQL, Reg,
-  SynEditTypes, SynCompletion, Clipbrd, grids, DbCtrls, types, LCLType, modsqlscript
-  {$IFDEF DEBUG},lazlogger{$ENDIF};
+  SynEditTypes, SynCompletion, Clipbrd, grids, DbCtrls, types, LCLType, modsqlscript,
+  dbugintf;
 
 
 type
 type
 
 
@@ -162,8 +162,7 @@ type
     procedure tbSaveClick(Sender: TObject);
     procedure tbSaveClick(Sender: TObject);
   private
   private
     { private declarations }
     { private declarations }
-    // Index of selected registered database
-    fdbIndex: Integer;
+    fdbIndex: Integer; // Index of selected registered database
     RegRec: TRegisteredDatabase;
     RegRec: TRegisteredDatabase;
     fResultControls: array of TObject;
     fResultControls: array of TObject;
     fParentResultControls: array of TObject;
     fParentResultControls: array of TObject;
@@ -172,8 +171,7 @@ type
     fSqlTrans: TSQLTransaction;
     fSqlTrans: TSQLTransaction;
     fCanceled: Boolean;
     fCanceled: Boolean;
     fStartLine: Integer;
     fStartLine: Integer;
-    fList: TStringList;
-    fQuery: string;
+    fQuery: TStringList; //query text
     fOrigQueryType: TQueryTypes;
     fOrigQueryType: TQueryTypes;
     fFinished: Boolean;
     fFinished: Boolean;
     fQT: TQueryThread;
     fQT: TQueryThread;
@@ -216,8 +214,9 @@ type
     OnCommit: TNotifyEvent;
     OnCommit: TNotifyEvent;
     procedure Init(dbIndex: Integer);
     procedure Init(dbIndex: Integer);
     function GetQueryType(AQuery: string): TQueryTypes;
     function GetQueryType(AQuery: string): TQueryTypes;
-    // Get query text from GUI/memo
-    function GetQuery: string;
+    // Get query text from GUI/memo into
+    // QueryContents
+    function GetQuery(QueryContents: tstrings): boolean;
     function CreateResultTab(QueryType: TQueryTypes; var aSqlQuery: TSQLQuery; var aSQLScript: TModSQLScript;
     function CreateResultTab(QueryType: TQueryTypes; var aSqlQuery: TSQLQuery; var aSQLScript: TModSQLScript;
       var meResult: TMemo; AdditionalTitle: string = ''): TTabSheet;
       var meResult: TMemo; AdditionalTitle: string = ''): TTabSheet;
     // Runs SQL script; returns result
     // Runs SQL script; returns result
@@ -616,8 +615,7 @@ begin
     detRollBack: Source:='Rollback:';
     detRollBack: Source:='Rollback:';
     else Source:='Unknown event. Please fix program code.';
     else Source:='Unknown event. Please fix program code.';
   end;
   end;
-  debugln(Source + Msg);
-  sleep(100);
+  SendDebug(Source + Msg);
 end;
 end;
 
 
 
 
@@ -1074,11 +1072,20 @@ end;
 
 
 { GetQuery: get query text from editor }
 { GetQuery: get query text from editor }
 
 
-function TfmQueryWindow.GetQuery: string;
+function TfmQueryWindow.GetQuery(QueryContents: TStrings): boolean;
+var
+  Seltext: string;
 begin
 begin
-  Result:= trim(meQuery.SelText);
-  if Result = '' then
-    Result:= trim(meQuery.Lines.Text);
+  Result:= false;
+  if assigned(QueryContents) then
+  begin
+    SelText:= trim(meQuery.SelText);
+    if SelTExt<>'' then
+      QueryContents.Text:= SelText
+    else
+      QueryContents.Text:= trim(meQuery.Lines.Text);
+    Result:= true;
+  end;
 end;
 end;
 
 
 
 
@@ -1196,17 +1203,17 @@ begin
     // Script
     // Script
     if (fOrigQueryType = qtScript) then
     if (fOrigQueryType = qtScript) then
     begin // script
     begin // script
-      ExecuteScript(fQuery);
+      ExecuteScript(fQuery.Text);
       Inc(fModifyCount);
       Inc(fModifyCount);
-      SqlType:= GetSQLType(fQuery, Command);
-      fmMain.AddToSQLHistory(RegRec.Title, SqlType, fQuery);
+      SqlType:= GetSQLType(fQuery.Text, Command);
+      fmMain.AddToSQLHistory(RegRec.Title, SqlType, fQuery.Text);
       fFinished:= True;
       fFinished:= True;
-      fList.Clear;
+      fQuery.Clear;
     end
     end
     else  // normal statement / Multi statements
     else  // normal statement / Multi statements
     begin
     begin
       Inc(fCnt);
       Inc(fCnt);
-      if not GetSQLSegment(fList, fStartline, fQueryType, EndLine, fQueryPart, IsDDL) then
+      if not GetSQLSegment(fQuery, fStartline, fQueryType, EndLine, fQueryPart, IsDDL) then
       begin
       begin
         fFinished:= True;
         fFinished:= True;
         Exit;
         Exit;
@@ -1409,7 +1416,7 @@ begin
         begin
         begin
           fModifyCount:= 0;
           fModifyCount:= 0;
         end;
         end;
-      if fStartLine >= fList.Count then
+      if fStartLine >= fQuery.Count then
         fFinished:= True;
         fFinished:= True;
     end;
     end;
   except
   except
@@ -1450,6 +1457,10 @@ begin
     try
     try
       ATab.ImageIndex:= 2;
       ATab.ImageIndex:= 2;
       SQLScript.Script.Text:= Script;
       SQLScript.Script.Text:= Script;
+      {$IFDEF DEBUG}
+      //todo: debug
+      SendDebug('going to run script: '+SQLScript.Script.Text);
+      {$Endif}
       SQLScript.ExecuteScript;
       SQLScript.ExecuteScript;
 
 
       // Auto commit
       // Auto commit
@@ -1467,6 +1478,9 @@ begin
   except
   except
     on e: exception do
     on e: exception do
     begin
     begin
+      {$IFDEF DEBUG}
+      SendDebug('ExecuteScript failed; error '+E.Message);
+      {$Endif}
       Result:= False;
       Result:= False;
       if Assigned(ATab) then
       if Assigned(ATab) then
         ATab.TabVisible:= False;
         ATab.TabVisible:= False;
@@ -1698,7 +1712,11 @@ end;
 
 
 procedure TfmQueryWindow.FormCreate(Sender: TObject);
 procedure TfmQueryWindow.FormCreate(Sender: TObject);
 begin
 begin
-  fList:= TStringList.Create;
+  {$IFNDEF DEBUG}
+  // Do not log to debug server if built as release instead of debug
+  SetDebuggingEnabled(false);
+  {$ENDIF}
+  fQuery:= TStringList.Create;
   // Initialize new instance of IBConnection and SQLTransaction
   // Initialize new instance of IBConnection and SQLTransaction
   ibConnection:= TIBConnection.Create(nil);
   ibConnection:= TIBConnection.Create(nil);
   {$IFDEF DEBUG}
   {$IFDEF DEBUG}
@@ -1715,7 +1733,7 @@ begin
   // Clean up resources to avoid memory leaks
   // Clean up resources to avoid memory leaks
   fSqlTrans.Free;
   fSqlTrans.Free;
   IBConnection.Free;
   IBConnection.Free;
-  FList.Free;
+  fQuery.Free;
 end;
 end;
 
 
 procedure TfmQueryWindow.FormKeyDown(Sender: TObject; var Key: Word;
 procedure TfmQueryWindow.FormKeyDown(Sender: TObject; var Key: Word;
@@ -2089,8 +2107,11 @@ end;
 procedure TfmQueryWindow.CallExecuteQuery(aQueryType: TQueryTypes);
 procedure TfmQueryWindow.CallExecuteQuery(aQueryType: TQueryTypes);
 begin
 begin
   // Get query text from memo
   // Get query text from memo
-  fQuery:= GetQuery;
-  fList.Text:= fQuery;
+  if not(GetQuery(fQuery)) then
+  begin
+    ShowMessage('Could not get valid query');
+    exit;
+  end;
   fStartLine:= 0;
   fStartLine:= 0;
 
 
   // Disable buttons to prevent query interrupt
   // Disable buttons to prevent query interrupt
@@ -2104,7 +2125,7 @@ begin
 
 
   // Get initial query type; this can be changed later in the next parts
   // Get initial query type; this can be changed later in the next parts
   if aQueryType = qtUnknown then // Auto
   if aQueryType = qtUnknown then // Auto
-    fOrigQueryType:= GetQueryType(fQuery)
+    fOrigQueryType:= GetQueryType(fQuery.Text)
   else
   else
     fOrigQueryType:= aQueryType;
     fOrigQueryType:= aQueryType;