mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	Update of VC++ project files. VC++Files/mysqlmanager/childfrm.cpp: Rename: VC++Files/mysqlmanager/CHILDFRM.CPP -> VC++Files/mysqlmanager/childfrm.cpp VC++Files/mysqlmanager/childfrm.h: Rename: VC++Files/mysqlmanager/CHILDFRM.H -> VC++Files/mysqlmanager/childfrm.h VC++Files/mysqlmanager/mainfrm.cpp: Rename: VC++Files/mysqlmanager/MAINFRM.CPP -> VC++Files/mysqlmanager/mainfrm.cpp VC++Files/mysqlmanager/mainfrm.h: Rename: VC++Files/mysqlmanager/MAINFRM.H -> VC++Files/mysqlmanager/mainfrm.h VC++Files/mysqlmanager/mysqlmanager.dsp: Rename: VC++Files/mysqlmanager/MySqlManager.dsp -> VC++Files/mysqlmanager/mysqlmanager.dsp VC++Files/mysqlmanager/mysqlmanager.mak: Rename: VC++Files/mysqlmanager/MySqlManager.mak -> VC++Files/mysqlmanager/mysqlmanager.mak VC++Files/mysqlmanager/resource.h: Rename: VC++Files/mysqlmanager/RESOURCE.H -> VC++Files/mysqlmanager/resource.h VC++Files/mysqlmanager/stdafx.cpp: Rename: VC++Files/mysqlmanager/STDAFX.CPP -> VC++Files/mysqlmanager/stdafx.cpp VC++Files/mysqlmanager/stdafx.h: Rename: VC++Files/mysqlmanager/STDAFX.H -> VC++Files/mysqlmanager/stdafx.h VC++Files/mysqlmanager/toolsql.cpp: Rename: VC++Files/mysqlmanager/TOOLSQL.CPP -> VC++Files/mysqlmanager/toolsql.cpp VC++Files/mysqlmanager/toolsql.h: Rename: VC++Files/mysqlmanager/TOOLSQL.H -> VC++Files/mysqlmanager/toolsql.h VC++Files/mysqlmanager/RES/bitmap1.bmp: Rename: VC++Files/mysqlmanager/RES/BITMAP1.BMP -> VC++Files/mysqlmanager/RES/bitmap1.bmp VC++Files/mysqlmanager/RES/bitmap3.bmp: Rename: VC++Files/mysqlmanager/RES/BITMAP3.BMP -> VC++Files/mysqlmanager/RES/bitmap3.bmp VC++Files/mysqlmanager/RES/bmp00001.bmp: Rename: VC++Files/mysqlmanager/RES/BMP00001.BMP -> VC++Files/mysqlmanager/RES/bmp00001.bmp VC++Files/mysqlmanager/RES/bmp00002.bmp: Rename: VC++Files/mysqlmanager/RES/BMP00002.BMP -> VC++Files/mysqlmanager/RES/bmp00002.bmp VC++Files/mysqlmanager/RES/database.bmp: Rename: VC++Files/mysqlmanager/RES/DATABASE.BMP -> VC++Files/mysqlmanager/RES/database.bmp VC++Files/mysqlmanager/RES/fontd.bmp: Rename: VC++Files/mysqlmanager/RES/FONTD.BMP -> VC++Files/mysqlmanager/RES/fontd.bmp VC++Files/mysqlmanager/RES/fontu.bmp: Rename: VC++Files/mysqlmanager/RES/FONTU.BMP -> VC++Files/mysqlmanager/RES/fontu.bmp VC++Files/mysqlmanager/RES/query_ex.bmp: Rename: VC++Files/mysqlmanager/RES/QUERY_EX.BMP -> VC++Files/mysqlmanager/RES/query_ex.bmp VC++Files/mysqlmanager/RES/toolbar.bmp: Rename: VC++Files/mysqlmanager/RES/TOOLBAR.BMP -> VC++Files/mysqlmanager/RES/toolbar.bmp BUILD/compile-pentium-valgrind-max: Use MYSQL_SERVER_SUFFIX VC++Files/bdb/bdb.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/client/mysql.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/client/mysqladmin.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/client/mysqldump.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/client/mysqlimport.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/client/mysqlshow.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/copy_mysql_files.bat: Assume we are in correct directory VC++Files/innobase/innobase.dsp: Use new version of MYSQL_SERVER_SUFFIX Remove old files VC++Files/isamchk/isamchk.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/libmysqld/libmysqld.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/my_print_defaults/my_print_defaults.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/myisamchk/myisamchk.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/myisamlog/myisamlog.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/myisampack/myisampack.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/mysql.dsw: Use new version of MYSQL_SERVER_SUFFIX VC++Files/mysqlbinlog/mysqlbinlog.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/mysqlcheck/mysqlcheck.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/mysys/mysys.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/pack_isam/pack_isam.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/perror/perror.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/replace/replace.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/sql/mysqld.dsp: Use new version of MYSQL_SERVER_SUFFIX include/my_global.h: Added QUOTE and STRINGIFY include/mysql_version.h.in: New MYSQL_SERVER_SUFFIX handling innobase/eval/eval0eval.c: Fixed compiler warning libmysql/libmysql.c: Use STRINGIFY() sql/mysqld.cc: New MYSQL_SERVER_SUFFIX handling sql/mysqld_suffix.h: New MYSQL_SERVER_SUFFIX handling sql/set_var.cc: Use STRINGIFY() zlib/contrib/asm386/zlibvc.dsp: Updated for 4.0
		
			
				
	
	
		
			688 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			688 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// ToolSql.cpp : implementation file
 | 
						|
//
 | 
						|
 | 
						|
#include "stdafx.h"
 | 
						|
#include "MySqlManager.h"
 | 
						|
#include "ToolSql.h"
 | 
						|
 | 
						|
#define WINDOW_COORDS 0
 | 
						|
#define CLIENT_COORDS 1
 | 
						|
 | 
						|
#define MY_TIMER_ID	0x1234
 | 
						|
 | 
						|
#ifdef _DEBUG
 | 
						|
   #define new DEBUG_NEW
 | 
						|
   #undef THIS_FILE
 | 
						|
static char THIS_FILE[] = __FILE__;
 | 
						|
#endif
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
CToolSql::CToolSql(CWnd* pParent,CResource* pServer,CResource* pResource)
 | 
						|
: CDialog(CToolSql::IDD, pParent)
 | 
						|
, m_pQuery(0)
 | 
						|
, m_pResults(0)
 | 
						|
, m_pStatus(0)
 | 
						|
, m_pServer(pServer)
 | 
						|
, m_pResource(pResource)
 | 
						|
, m_ui_timer(0)
 | 
						|
{
 | 
						|
   //{{AFX_DATA_INIT(CToolSql)
 | 
						|
	m_nIntervalTimerSeconds = 10;
 | 
						|
	m_bClear = FALSE;
 | 
						|
	//}}AFX_DATA_INIT
 | 
						|
   memset ( & m_lf, 0,sizeof(m_lf) );
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
CToolSql::~CToolSql()
 | 
						|
{
 | 
						|
 | 
						|
	if (m_ui_timer)
 | 
						|
	{
 | 
						|
		KillTimer(MY_TIMER_ID);
 | 
						|
	}
 | 
						|
 | 
						|
	if (m_pdb)
 | 
						|
   {
 | 
						|
      mysql_close(m_pdb);
 | 
						|
   }
 | 
						|
   if (m_pQuery)
 | 
						|
   {
 | 
						|
      m_pQuery->DestroyWindow();
 | 
						|
      delete m_pQuery;
 | 
						|
   }
 | 
						|
   if (m_pResults)
 | 
						|
   {
 | 
						|
      m_pResults->DestroyWindow();
 | 
						|
      delete m_pResults;
 | 
						|
   }
 | 
						|
   if (m_pStatus)
 | 
						|
   {
 | 
						|
      m_pStatus->DestroyWindow();
 | 
						|
      delete m_pStatus;
 | 
						|
   }
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CToolSql::DoDataExchange(CDataExchange* pDX)
 | 
						|
{
 | 
						|
   CDialog::DoDataExchange(pDX);
 | 
						|
   //{{AFX_DATA_MAP(CToolSql)
 | 
						|
	DDX_Control(pDX, IDC_STOP_PB, m_ctl_Stop);
 | 
						|
	DDX_Control(pDX, IDC_START_PB, m_ctl_Start);
 | 
						|
	DDX_Control(pDX, IDC_SERVER_CB, m_ctl_Server);
 | 
						|
   DDX_Control(pDX, IDC_TAB1, m_tabs);
 | 
						|
	DDX_Text(pDX, IDC_TIMER_SECS, m_nIntervalTimerSeconds);
 | 
						|
	DDV_MinMaxInt(pDX, m_nIntervalTimerSeconds, 1, 120);
 | 
						|
	DDX_Check(pDX, IDC_CLEAR, m_bClear);
 | 
						|
	//}}AFX_DATA_MAP
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
BEGIN_MESSAGE_MAP(CToolSql, CDialog)
 | 
						|
//{{AFX_MSG_MAP(CToolSql)
 | 
						|
	ON_BN_CLICKED(IDC_QUERY_PB, OnQueryPb)
 | 
						|
	ON_BN_CLICKED(IDC_DATABASES_PB, OnQueryDatabases)
 | 
						|
	ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, OnSelchangeTab1)
 | 
						|
	ON_BN_CLICKED(IDC_FONT_PB, OnFontPb)
 | 
						|
	ON_WM_SIZE()
 | 
						|
	ON_BN_CLICKED(IDC_START_PB, OnStartPb)
 | 
						|
	ON_BN_CLICKED(IDC_STOP_PB, OnStopPb)
 | 
						|
	ON_WM_TIMER()
 | 
						|
	ON_WM_DESTROY()
 | 
						|
	ON_BN_CLICKED(IDC_CLEAR, OnClear)
 | 
						|
	ON_COMMAND(IDM_QUERY_EXEC, OnQueryPb)
 | 
						|
	ON_COMMAND(IDM_QUERY_DATABASES, OnQueryDatabases)
 | 
						|
	ON_EN_CHANGE(IDC_TIMER_SECS, OnChangeTimerSecs)
 | 
						|
	//}}AFX_MSG_MAP
 | 
						|
END_MESSAGE_MAP()
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
BOOL CToolSql::OnInitDialog()
 | 
						|
{
 | 
						|
 | 
						|
   CDialog::OnInitDialog();
 | 
						|
 | 
						|
	m_ctl_Start . EnableWindow(TRUE);
 | 
						|
	m_ctl_Stop  . EnableWindow(FALSE);
 | 
						|
 | 
						|
   CString strTitle;
 | 
						|
 | 
						|
   strTitle.Format ("mySql Query to %s on %s",m_pServer->GetDisplayName(),m_pServer->GetHostName());
 | 
						|
 | 
						|
	m_ctl_Server.AddString ( m_pServer->GetDisplayName() );
 | 
						|
	m_ctl_Server.SetCurSel (0);
 | 
						|
 | 
						|
   SetWindowText(strTitle);
 | 
						|
 | 
						|
   CWaitCursor x;
 | 
						|
 | 
						|
   m_btn_QueryExec.AutoLoad ( IDC_QUERY_PB, this );
 | 
						|
   m_btn_QueryDatabases.AutoLoad ( IDC_DATABASES_PB, this );
 | 
						|
   m_btn_Font.AutoLoad ( IDC_FONT_PB, this );
 | 
						|
 | 
						|
   m_tabs.GetWindowRect ( m_rectTab[WINDOW_COORDS] );
 | 
						|
   GetWindowRect        ( m_rectDlg[WINDOW_COORDS] );
 | 
						|
 | 
						|
   m_tabs.GetClientRect ( m_rectTab[CLIENT_COORDS] );
 | 
						|
   GetClientRect        ( m_rectDlg[CLIENT_COORDS] );
 | 
						|
 | 
						|
   CMenu* pSysMenu = GetSystemMenu(FALSE);
 | 
						|
   if (pSysMenu != NULL)
 | 
						|
   {
 | 
						|
      CString strText;
 | 
						|
      strText.LoadString(IDS_QUERY_EXEC);
 | 
						|
      if (!strText.IsEmpty())
 | 
						|
      {
 | 
						|
         pSysMenu->AppendMenu(MF_SEPARATOR);
 | 
						|
         pSysMenu->AppendMenu(MF_STRING, IDM_QUERY_EXEC, strText);
 | 
						|
      }
 | 
						|
      strText.LoadString(IDS_QUERY_DATABASES);
 | 
						|
      if (!strText.IsEmpty())
 | 
						|
      {
 | 
						|
         pSysMenu->AppendMenu(MF_STRING, IDM_QUERY_DATABASES, strText);
 | 
						|
      }
 | 
						|
   }
 | 
						|
 | 
						|
 | 
						|
   m_pdb = new MYSQL;
 | 
						|
 | 
						|
   CString strQuery   ( "Query" );
 | 
						|
   CString strResults ( "Results" );
 | 
						|
   CString strStatus  ( "Status" );
 | 
						|
 | 
						|
   TC_ITEM tc1 = { TCIF_TEXT, 0,0, (LPSTR)(LPCTSTR)strQuery,   strQuery.GetLength(), 0,0};
 | 
						|
   TC_ITEM tc2 = { TCIF_TEXT, 0,0, (LPSTR)(LPCTSTR)strResults, strResults.GetLength(), 0,0};
 | 
						|
   TC_ITEM tc3 = { TCIF_TEXT, 0,0, (LPSTR)(LPCTSTR)strStatus,  strStatus.GetLength(), 0,0};
 | 
						|
 | 
						|
   m_tabs.InsertItem ( 0,&tc1 );
 | 
						|
   m_tabs.InsertItem ( 1,&tc2 );
 | 
						|
   m_tabs.InsertItem ( 2,&tc3 );
 | 
						|
 | 
						|
   m_pQuery   = new CToolSqlQuery ( NULL );
 | 
						|
   m_pResults = new CToolSqlResults ( NULL );
 | 
						|
   m_pStatus  = new CToolSqlStatus ( NULL );
 | 
						|
 | 
						|
   try
 | 
						|
   {
 | 
						|
 | 
						|
//   OpenDatabase();
 | 
						|
//
 | 
						|
//   m_pSelection->SetDatabase ( & m_db );
 | 
						|
//   m_pScript->SetDatabase ( & m_db );
 | 
						|
//   m_pLog->SetDatabase ( & m_db );
 | 
						|
 | 
						|
      m_pQuery   -> Create ( (LPCTSTR)IDD_TOOL_SQL_QUERY,   &m_tabs );
 | 
						|
      m_pResults -> Create ( (LPCTSTR)IDD_TOOL_SQL_RESULTS, &m_tabs );
 | 
						|
      m_pStatus  -> Create ( (LPCTSTR)IDD_TOOL_SQL_STATUS,  &m_tabs );
 | 
						|
 | 
						|
      ActivateTab ( 0 );
 | 
						|
 | 
						|
      m_pQuery   -> SetWindowPos(NULL,20,24,0,0,SWP_NOZORDER|SWP_NOSIZE);
 | 
						|
      m_pResults -> SetWindowPos(NULL,20,24,0,0,SWP_NOZORDER|SWP_NOSIZE);
 | 
						|
      m_pStatus  -> SetWindowPos(NULL,20,24,0,0,SWP_NOZORDER|SWP_NOSIZE);
 | 
						|
 | 
						|
      DoOnSize( SIZE_RESTORED, m_rectDlg[CLIENT_COORDS].Width(), m_rectDlg[CLIENT_COORDS].Height() );
 | 
						|
 | 
						|
   }
 | 
						|
   catch (...)
 | 
						|
   {
 | 
						|
   }
 | 
						|
 | 
						|
   mysql_init(m_pdb);
 | 
						|
   if (!mysql_real_connect(m_pdb,m_pServer->GetHostName(), m_pServer->GetUserName(),m_pServer->GetPassword(),0,m_pServer->GetPortNumber(), NullS,0))
 | 
						|
   {
 | 
						|
//     my_printf_error(0,"connect to server at '%s' failed; error: '%s'",
 | 
						|
//     MYF(ME_BELL), pResource->GetHostName(), mysql_error(&mysql));
 | 
						|
      CString strText;
 | 
						|
      strText.Format ( "connect to server at '%s' failed; error: '%s'", m_pServer->GetHostName(), mysql_error(m_pdb));
 | 
						|
      AfxMessageBox(strText);
 | 
						|
      EndDialog(IDCANCEL);
 | 
						|
      return FALSE;
 | 
						|
   }
 | 
						|
 | 
						|
   if ( m_pResource && m_pResource->GetType() == CResource::eDatabase )
 | 
						|
   {
 | 
						|
      CString strDB = m_pResource->GetDisplayName();
 | 
						|
      strDB.TrimRight();
 | 
						|
      if (mysql_select_db(m_pdb,strDB))
 | 
						|
      {
 | 
						|
      }
 | 
						|
   }
 | 
						|
 | 
						|
   return FALSE;  // return TRUE unless you set the focus to a control
 | 
						|
   // EXCEPTION: OCX Property Pages should return FALSE
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CToolSql::ActivateTab ( int tab )
 | 
						|
 | 
						|
{
 | 
						|
   switch (tab)
 | 
						|
   {
 | 
						|
      case 0:   ;
 | 
						|
         m_pResults-> ShowWindow(SW_HIDE);
 | 
						|
         m_pStatus-> ShowWindow(SW_HIDE);
 | 
						|
         m_pQuery-> ShowWindow(SW_SHOW);
 | 
						|
         m_pQuery->m_ctl_edit.SetFocus();
 | 
						|
         break;
 | 
						|
      case 1:   ;
 | 
						|
         m_pQuery-> ShowWindow(SW_HIDE);
 | 
						|
         m_pStatus-> ShowWindow(SW_HIDE);
 | 
						|
         m_pResults-> ShowWindow(SW_SHOW);
 | 
						|
         m_pResults->m_ctl_edit.SetFocus();
 | 
						|
         break;
 | 
						|
      case 2:   ;
 | 
						|
         m_pResults-> ShowWindow(SW_HIDE);
 | 
						|
         m_pQuery-> ShowWindow(SW_HIDE);
 | 
						|
         m_pStatus-> ShowWindow(SW_SHOW);
 | 
						|
         m_pStatus->m_ctl_edit.SetFocus();
 | 
						|
         break;
 | 
						|
      default:
 | 
						|
         break;
 | 
						|
   }
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CalculateFontSize ( CEdit& ed, CSize& sizeRet )
 | 
						|
 | 
						|
{
 | 
						|
 | 
						|
   CDC* pdc = ed.GetDC();
 | 
						|
 | 
						|
   int nAveWidth , nAveHeight;
 | 
						|
   int i ;
 | 
						|
 | 
						|
   CSize size ;
 | 
						|
 | 
						|
   static BOOL bFirstTime = TRUE;
 | 
						|
   static char rgchAlphabet [54] ;
 | 
						|
 | 
						|
   if ( bFirstTime )
 | 
						|
   {
 | 
						|
      bFirstTime = false;
 | 
						|
      for ( i = 0 ; i <= 25 ; i++)
 | 
						|
      {
 | 
						|
         rgchAlphabet[i]    = (char)(i+(int)'a') ;
 | 
						|
         rgchAlphabet[i+26] = (char)(i+(int)'A') ;
 | 
						|
      }
 | 
						|
      rgchAlphabet[52] = 0x20;
 | 
						|
      rgchAlphabet[53] = 0x20;
 | 
						|
   }
 | 
						|
 | 
						|
   CFont* pf = ed.GetFont();
 | 
						|
   LOGFONT lf;
 | 
						|
   pf->GetLogFont(&lf);
 | 
						|
   pdc->SelectObject (pf);
 | 
						|
   GetTextExtentPoint32 ( pdc->m_hDC, (LPSTR) rgchAlphabet, 54, & size ) ;
 | 
						|
 | 
						|
   nAveWidth = size.cx / 54 ;
 | 
						|
 | 
						|
   if ( size.cx % 54 )
 | 
						|
   {
 | 
						|
      nAveWidth++;
 | 
						|
   }
 | 
						|
 | 
						|
   nAveHeight = size.cy; //6 * size.cy / 4;
 | 
						|
 | 
						|
   sizeRet.cx = nAveWidth;
 | 
						|
   sizeRet.cy = nAveHeight; // tm.tmHeight;
 | 
						|
 | 
						|
   ed.ReleaseDC(pdc);
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////////////////////////
 | 
						|
int ProcessYieldMessage ()
 | 
						|
{
 | 
						|
 | 
						|
   CWinApp* pApp = AfxGetApp();
 | 
						|
 | 
						|
   if ( pApp )
 | 
						|
   {
 | 
						|
      MSG msgx;
 | 
						|
      while (::PeekMessage(&msgx, NULL, NULL, NULL, PM_NOREMOVE))
 | 
						|
         try
 | 
						|
         {
 | 
						|
            if (!pApp->PumpMessage())
 | 
						|
            {
 | 
						|
//       ExitProcess(1);
 | 
						|
            }
 | 
						|
         }
 | 
						|
         catch (...)
 | 
						|
         {
 | 
						|
         }
 | 
						|
   }
 | 
						|
 | 
						|
   return 0;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void print_table_data(MYSQL_RES *result,CString& str,CEdit& ed,LOGFONT& lf)
 | 
						|
{
 | 
						|
   MYSQL_ROW    cur;
 | 
						|
   uint         length;
 | 
						|
   MYSQL_FIELD* field;
 | 
						|
   bool*        num_flag;
 | 
						|
   my_ulonglong nRows  =  mysql_num_rows(result);
 | 
						|
   uint         nFields = mysql_num_fields(result);
 | 
						|
   int*         rgi = new int [nFields];
 | 
						|
   memset ( rgi, 0,   nFields*sizeof(int) );
 | 
						|
   num_flag=(bool*) my_alloca(sizeof(bool)*nFields);
 | 
						|
 | 
						|
   ed.SetLimitText(65535*16);
 | 
						|
 | 
						|
   CSize sizeFont;
 | 
						|
   CalculateFontSize ( ed, sizeFont );
 | 
						|
   uint index = 0;
 | 
						|
   rgi[index++]=0;
 | 
						|
   CString separator("");
 | 
						|
 | 
						|
   mysql_field_seek(result,0);
 | 
						|
 | 
						|
   for (uint off=0; (field = mysql_fetch_field(result)) ; off++)
 | 
						|
   {
 | 
						|
      uint length= (uint) strlen(field->name);
 | 
						|
      length=max(length,field->max_length);
 | 
						|
      if (length < 4 && !IS_NOT_NULL(field->flags))
 | 
						|
         length=4;               // Room for "NULL"
 | 
						|
      field->max_length=length+1;
 | 
						|
      int n=length+2;
 | 
						|
      for (uint i=lstrlen(field->name); i-- > 0 ; ) separator+="-";
 | 
						|
      if ( index!= nFields )
 | 
						|
      {
 | 
						|
         int o = rgi[index-1];
 | 
						|
         rgi[index++]=o+((n+1)*sizeFont.cx)/2;
 | 
						|
      }
 | 
						|
      separator+='\t';
 | 
						|
      str += field->name;
 | 
						|
      str += "\t";
 | 
						|
      num_flag[off]= IS_NUM(field->type);
 | 
						|
   }
 | 
						|
   separator += "\r\n";
 | 
						|
   str += "\r\n";
 | 
						|
   str += separator;
 | 
						|
   ed.SetSel(-1,-1);
 | 
						|
   ed.ReplaceSel(str);
 | 
						|
 | 
						|
   if ( 1 || nRows > 100 )
 | 
						|
   {
 | 
						|
      while ((cur = mysql_fetch_row(result)))
 | 
						|
      {
 | 
						|
         ProcessYieldMessage ();
 | 
						|
         mysql_field_seek(result,0);
 | 
						|
         str.Empty();
 | 
						|
         ed.SetSel(-1,-1);
 | 
						|
         for (uint off=0 ; off < mysql_num_fields(result); off++)
 | 
						|
         {
 | 
						|
            field = mysql_fetch_field(result);
 | 
						|
            length=field->max_length;
 | 
						|
            CString strText;
 | 
						|
            strText.Format ("%s", cur[off] ? (char*) cur[off] : "NULL");
 | 
						|
            str += strText;
 | 
						|
            str += "\t";
 | 
						|
         }
 | 
						|
         str += "\r\n";
 | 
						|
         ed.SetSel(-1,-1);
 | 
						|
         ed.ReplaceSel(str);
 | 
						|
      }
 | 
						|
   }
 | 
						|
   else
 | 
						|
   {
 | 
						|
      while ((cur = mysql_fetch_row(result)))
 | 
						|
      {
 | 
						|
         mysql_field_seek(result,0);
 | 
						|
         for (uint off=0 ; off < mysql_num_fields(result); off++)
 | 
						|
         {
 | 
						|
            field = mysql_fetch_field(result);
 | 
						|
            length=field->max_length;
 | 
						|
            CString strText;
 | 
						|
            strText.Format ("%s", cur[off] ? (char*) cur[off] : "NULL");
 | 
						|
            str += strText;
 | 
						|
            str += "\t";
 | 
						|
         }
 | 
						|
         str += "\r\n";
 | 
						|
      }
 | 
						|
   }
 | 
						|
   my_afree((gptr) num_flag);
 | 
						|
   str += "\r\n";
 | 
						|
   ed.SetTabStops(nFields,rgi);
 | 
						|
   delete [] rgi;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CToolSql::OnQueryPb()
 | 
						|
{
 | 
						|
 | 
						|
   CWaitCursor x;
 | 
						|
//   mysql_select_db(m_pdb,"mysql");
 | 
						|
 | 
						|
   if ( m_pResource && m_pResource->GetType() == CResource::eDatabase )
 | 
						|
   {
 | 
						|
      CString strDB = m_pResource->GetDisplayName();
 | 
						|
      strDB.TrimRight();
 | 
						|
      if (mysql_select_db(m_pdb,strDB))
 | 
						|
      {
 | 
						|
      }
 | 
						|
   }
 | 
						|
 | 
						|
   m_pQuery->UpdateData();
 | 
						|
   m_pResults->m_edit.Empty();
 | 
						|
   CString str = m_pQuery->m_edit;
 | 
						|
   if ( mysql_real_query(m_pdb,str,str.GetLength())==0 )
 | 
						|
   {
 | 
						|
      MYSQL_RES *result;
 | 
						|
      if ((result=mysql_store_result(m_pdb)))
 | 
						|
      {
 | 
						|
         my_ulonglong nRows = mysql_num_rows(result);
 | 
						|
         m_pResults->UpdateData(FALSE);
 | 
						|
         m_tabs.SetCurSel(1);
 | 
						|
         ActivateTab ( 1 );
 | 
						|
         print_table_data(result,m_pResults->m_edit,m_pResults->m_ctl_edit,m_lf);
 | 
						|
//       m_pResults->UpdateData(FALSE);
 | 
						|
         m_pResults->m_ctl_edit.SetSel(-1,-1);
 | 
						|
         CString strText;
 | 
						|
         strText.Format ( "\r\n(%d row(s) affected)\r\n", nRows );
 | 
						|
         m_pResults->m_ctl_edit.ReplaceSel(strText);
 | 
						|
			mysql_free_result(result);
 | 
						|
      }
 | 
						|
      else
 | 
						|
      {
 | 
						|
         m_pResults->m_edit = mysql_error(m_pdb);
 | 
						|
         m_pResults->UpdateData(FALSE);
 | 
						|
      }
 | 
						|
   }
 | 
						|
   else
 | 
						|
   {
 | 
						|
      m_pResults->m_edit = mysql_error(m_pdb);
 | 
						|
      m_pResults->UpdateData(FALSE);
 | 
						|
   }
 | 
						|
 | 
						|
   m_tabs.SetCurSel(1);
 | 
						|
   ActivateTab ( 1 );
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CToolSql::OnQueryDatabases()
 | 
						|
{
 | 
						|
   CWaitCursor x;
 | 
						|
   MYSQL_RES *result;
 | 
						|
   m_pResults->m_edit.Empty();
 | 
						|
   if ((result=mysql_list_dbs(m_pdb,0)))
 | 
						|
   {
 | 
						|
      my_ulonglong nRows = mysql_num_rows(result);
 | 
						|
      print_table_data(result,m_pResults->m_edit,m_pResults->m_ctl_edit,m_lf);
 | 
						|
      //m_pResults->UpdateData(FALSE);
 | 
						|
      mysql_free_result(result);
 | 
						|
   }
 | 
						|
   else
 | 
						|
   {
 | 
						|
      m_pResults->m_edit = mysql_error(m_pdb);
 | 
						|
      m_pResults->UpdateData(FALSE);
 | 
						|
   }
 | 
						|
 | 
						|
   m_tabs.SetCurSel(1);
 | 
						|
   ActivateTab ( 1 );
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CToolSql::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
 | 
						|
{
 | 
						|
   ActivateTab ( m_tabs.GetCurSel() );
 | 
						|
   *pResult = 0;
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CToolSql::OnFontPb()
 | 
						|
{
 | 
						|
 | 
						|
   CFontDialog FontDlg ( & m_lf );
 | 
						|
 | 
						|
   if ( FontDlg.DoModal ( ) == IDOK )
 | 
						|
   {
 | 
						|
      if (m_font.GetSafeHandle())
 | 
						|
         m_font.DeleteObject();
 | 
						|
      m_lf = *FontDlg.m_cf.lpLogFont;
 | 
						|
      m_font.CreateFontIndirect(FontDlg.m_cf.lpLogFont);
 | 
						|
      m_pQuery->SetFont(&m_font);
 | 
						|
      m_pResults->SetFont(&m_font);
 | 
						|
      m_pStatus->SetFont(&m_font);
 | 
						|
   }
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CToolSql::DoOnSize(UINT nType, int cx, int cy)
 | 
						|
{
 | 
						|
 | 
						|
   int nx = cx - ( m_rectDlg[CLIENT_COORDS].Width  ( ) - m_rectTab[CLIENT_COORDS].Width  ( ) );
 | 
						|
   int ny = cy - ( m_rectDlg[CLIENT_COORDS].Height ( ) - m_rectTab[CLIENT_COORDS].Height ( ) );
 | 
						|
 | 
						|
   if (IsWindow(m_tabs.GetSafeHwnd()))
 | 
						|
   {
 | 
						|
      m_tabs.SetWindowPos ( NULL
 | 
						|
                            , 0
 | 
						|
                            , 0
 | 
						|
                            , nx
 | 
						|
                            , ny
 | 
						|
                            , SWP_NOZORDER | SWP_NOMOVE | SWP_SHOWWINDOW );
 | 
						|
 | 
						|
      if (m_pResults&&IsWindow(m_pResults->GetSafeHwnd()))
 | 
						|
         m_pResults -> SetWindowPos(NULL,20,24,nx-40,ny-48,SWP_NOZORDER | SWP_NOMOVE );
 | 
						|
      if (m_pQuery&&IsWindow(m_pQuery->GetSafeHwnd()))
 | 
						|
         m_pQuery -> SetWindowPos(NULL,20,24,nx-40,ny-48,SWP_NOZORDER | SWP_NOMOVE );
 | 
						|
      if (m_pStatus&&IsWindow(m_pStatus->GetSafeHwnd()))
 | 
						|
         m_pStatus -> SetWindowPos(NULL,20,24,nx-40,ny-48,SWP_NOZORDER | SWP_NOMOVE );
 | 
						|
//     switch ( m_tabs.GetCurSel() )
 | 
						|
//     {
 | 
						|
//        case 0:
 | 
						|
//        {
 | 
						|
//          if (m_pResults&&IsWindow(m_pResults->GetSafeHwnd()))
 | 
						|
//             m_pResults -> SetWindowPos(NULL,20,24,nx-40,ny-48,SWP_NOZORDER | SWP_NOMOVE | SWP_HIDEWINDOW );
 | 
						|
//          if (m_pQuery&&IsWindow(m_pQuery->GetSafeHwnd()))
 | 
						|
//             m_pQuery -> SetWindowPos(NULL,20,24,nx-40,ny-48,SWP_NOZORDER | SWP_NOMOVE | SWP_SHOWWINDOW );
 | 
						|
//          break;
 | 
						|
//        }
 | 
						|
//        case 1:
 | 
						|
//        {
 | 
						|
//          if (m_pQuery&&IsWindow(m_pQuery->GetSafeHwnd()))
 | 
						|
//             m_pQuery -> SetWindowPos(NULL,20,24,nx-40,ny-48,SWP_NOZORDER | SWP_NOMOVE | SWP_HIDEWINDOW );
 | 
						|
//          if (m_pResults&&IsWindow(m_pResults->GetSafeHwnd()))
 | 
						|
//             m_pResults -> SetWindowPos(NULL,20,24,nx-40,ny-48,SWP_NOZORDER | SWP_NOMOVE | SWP_SHOWWINDOW );
 | 
						|
//          break;
 | 
						|
//        }
 | 
						|
//     }
 | 
						|
   }
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CToolSql::OnSize(UINT nType, int cx, int cy)
 | 
						|
{
 | 
						|
 | 
						|
   CDialog::OnSize(nType, cx, cy);
 | 
						|
 | 
						|
   DoOnSize ( nType, cx, cy );
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CToolSql::OnOK()
 | 
						|
{
 | 
						|
   CDialog::OnOK();
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CToolSql::OnCancel()
 | 
						|
{
 | 
						|
   CDialog::OnCancel();
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
BOOL CToolSql::PreTranslateMessage(MSG* pMsg)
 | 
						|
{
 | 
						|
   return CDialog::PreTranslateMessage(pMsg);
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CToolSql::DoProcessListQuery()
 | 
						|
{
 | 
						|
 | 
						|
	MYSQL_RES *result;
 | 
						|
	if (result=mysql_list_processes(m_pdb))
 | 
						|
	{
 | 
						|
		if (m_bClear)
 | 
						|
		{
 | 
						|
			m_pStatus->m_edit.Empty();
 | 
						|
			m_pStatus->UpdateData(FALSE);
 | 
						|
		}
 | 
						|
		print_table_data(result,m_pStatus->m_edit,m_pStatus->m_ctl_edit,m_lf);
 | 
						|
		mysql_free_result(result);
 | 
						|
	}
 | 
						|
	else
 | 
						|
	{
 | 
						|
//		my_printf_error(0,"process list failed; error: '%s'",MYF(ME_BELL),mysql_error(mysql));
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CToolSql::OnStartPb()
 | 
						|
{
 | 
						|
	UpdateData();
 | 
						|
	if (m_ui_timer) return;
 | 
						|
	if (m_nIntervalTimerSeconds<1) return;
 | 
						|
	ActivateTab ( 2 );
 | 
						|
	m_ui_timer = SetTimer( MY_TIMER_ID, m_nIntervalTimerSeconds*1000, NULL );
 | 
						|
	m_ctl_Start . EnableWindow(FALSE);
 | 
						|
	m_ctl_Stop  . EnableWindow(TRUE);
 | 
						|
	DoProcessListQuery();
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CToolSql::OnStopPb()
 | 
						|
{
 | 
						|
	UpdateData();
 | 
						|
	if (m_ui_timer)
 | 
						|
	{
 | 
						|
		KillTimer(MY_TIMER_ID);
 | 
						|
		m_ui_timer = 0;
 | 
						|
	}
 | 
						|
	m_ctl_Start . EnableWindow(TRUE);
 | 
						|
	m_ctl_Stop  . EnableWindow(FALSE);
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CToolSql::OnTimer(UINT nIDEvent)
 | 
						|
{
 | 
						|
	DoProcessListQuery();
 | 
						|
	CDialog::OnTimer(nIDEvent);
 | 
						|
}
 | 
						|
 | 
						|
void CToolSql::OnDestroy()
 | 
						|
{
 | 
						|
	if (m_ui_timer)
 | 
						|
	{
 | 
						|
		KillTimer(MY_TIMER_ID);
 | 
						|
		m_ui_timer = 0;
 | 
						|
	}
 | 
						|
	CDialog::OnDestroy();
 | 
						|
}
 | 
						|
 | 
						|
void CToolSql::OnClear()
 | 
						|
{
 | 
						|
	UpdateData();
 | 
						|
}
 | 
						|
 | 
						|
void CToolSql::OnChangeTimerSecs()
 | 
						|
{
 | 
						|
	UpdateData();
 | 
						|
}
 |