mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	Docs/bk.txt: instructions for compiling for Win via samba VC++Files/mysqlbinlog/mysqlbinlog.dsp: add some options VC++Files/mysys/mysys.dsp: add some options
		
			
				
	
	
		
			850 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			850 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// MySqlManagerView.cpp : implementation of the CMySqlManagerView class
 | 
						|
//
 | 
						|
 | 
						|
#include "stdafx.h"
 | 
						|
#include "MySqlManager.h"
 | 
						|
#include "MySqlManagerDoc.h"
 | 
						|
#include "MySqlManagerView.h"
 | 
						|
#include "mainfrm.h"
 | 
						|
#include "ToolSql.h"
 | 
						|
#include "RegisterServer.h"
 | 
						|
 | 
						|
class XStatus
 | 
						|
{
 | 
						|
public:
 | 
						|
   XStatus ( LPCSTR fmt, ... )
 | 
						|
   {
 | 
						|
      char buf [2048];
 | 
						|
      va_list args;
 | 
						|
      va_start(args, fmt);
 | 
						|
      int ret = vsprintf(buf, fmt, args);
 | 
						|
      MainFrame->StatusMsg ( "%s", buf );
 | 
						|
      va_end(args);
 | 
						|
   }
 | 
						|
   ~XStatus()
 | 
						|
   {
 | 
						|
      MainFrame->StatusMsg ( " ");
 | 
						|
   }
 | 
						|
private:
 | 
						|
   XStatus();
 | 
						|
};
 | 
						|
 | 
						|
#ifdef _DEBUG
 | 
						|
   #define new DEBUG_NEW
 | 
						|
   #undef THIS_FILE
 | 
						|
static char THIS_FILE[] = __FILE__;
 | 
						|
#endif
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
IMPLEMENT_DYNCREATE(CMySqlManagerView, CTreeView)
 | 
						|
 | 
						|
BEGIN_MESSAGE_MAP(CMySqlManagerView, CTreeView)
 | 
						|
//{{AFX_MSG_MAP(CMySqlManagerView)
 | 
						|
ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
 | 
						|
ON_COMMAND(IDM_SQL_TOOL_QUERY, OnSqlToolQuery)
 | 
						|
ON_COMMAND(IDM_REFRESH, OnRefresh)
 | 
						|
ON_COMMAND(IDM_TOOLS_SERVER_PROPERTIES,OnServerProperties)
 | 
						|
ON_COMMAND(IDM_TOOLS_REGISTER_SERVER, OnRegisterServer)
 | 
						|
ON_NOTIFY_REFLECT(NM_RCLICK, OnRclick)
 | 
						|
//}}AFX_MSG_MAP
 | 
						|
// Standard printing commands
 | 
						|
ON_COMMAND(ID_FILE_PRINT, CTreeView::OnFilePrint)
 | 
						|
ON_COMMAND(ID_FILE_PRINT_DIRECT, CTreeView::OnFilePrint)
 | 
						|
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CTreeView::OnFilePrintPreview)
 | 
						|
END_MESSAGE_MAP()
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
CMySqlManagerView::CMySqlManagerView()
 | 
						|
: m_pTree(0)
 | 
						|
, m_pImages(0)
 | 
						|
, m_pbmBmp(0)
 | 
						|
, m_pTool(0)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
CMySqlManagerView::~CMySqlManagerView()
 | 
						|
{
 | 
						|
   if ( m_pbmBmp ) delete m_pbmBmp;
 | 
						|
   if ( m_pImages ) delete m_pImages;
 | 
						|
   if ( m_pTool )
 | 
						|
   {
 | 
						|
      m_pTool->DestroyWindow();
 | 
						|
      delete m_pTool;
 | 
						|
   }
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
BOOL CMySqlManagerView::PreCreateWindow(CREATESTRUCT& cs)
 | 
						|
{
 | 
						|
   return CTreeView::PreCreateWindow(cs);
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CMySqlManagerView::OnDraw(CDC* pDC)
 | 
						|
{
 | 
						|
   CMySqlManagerDoc* pDoc = GetDocument();
 | 
						|
   ASSERT_VALID(pDoc);
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
BOOL CMySqlManagerView::OnPreparePrinting(CPrintInfo* pInfo)
 | 
						|
{
 | 
						|
   return DoPreparePrinting(pInfo);
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CMySqlManagerView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CMySqlManagerView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
#ifdef _DEBUG
 | 
						|
void CMySqlManagerView::AssertValid() const
 | 
						|
{
 | 
						|
   CTreeView::AssertValid();
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CMySqlManagerView::Dump(CDumpContext& dc) const
 | 
						|
{
 | 
						|
   CTreeView::Dump(dc);
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
CMySqlManagerDoc* CMySqlManagerView::GetDocument() // non-debug version is inline
 | 
						|
{
 | 
						|
   ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMySqlManagerDoc)));
 | 
						|
   return (CMySqlManagerDoc*)m_pDocument;
 | 
						|
}
 | 
						|
#endif //_DEBUG
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CMySqlManagerView::OnInitialUpdate()
 | 
						|
{
 | 
						|
 | 
						|
   CTreeView::OnInitialUpdate();
 | 
						|
 | 
						|
   m_pTree = & GetTreeCtrl();
 | 
						|
   m_pImages = new CImageList;
 | 
						|
   m_pImages->Create( 16, 16, FALSE, 0, 10 );
 | 
						|
   m_pbmBmp = new CBitmap;
 | 
						|
   m_pbmBmp->LoadBitmap( IDB_BITMAP1 );
 | 
						|
   m_pImages->Add( m_pbmBmp, (COLORREF)0 );
 | 
						|
   m_pTree->SetImageList( m_pImages, TVSIL_NORMAL );
 | 
						|
 | 
						|
   HTREEITEM h = AddResource ( TVI_ROOT, new CResourceServer ( "MySQL", "localhost", "root", "" ) );
 | 
						|
//   AddResource ( h, new CResourceProcesslist () );
 | 
						|
   h = AddResource ( TVI_ROOT, new CResourceServer ( "Test", "localhost", "test", "" ) );
 | 
						|
//   AddResource ( h, new CResourceProcesslist () );
 | 
						|
 | 
						|
   m_pTree->ModifyStyle(0, TVS_HASLINES|TVS_HASBUTTONS);
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
HTREEITEM CMySqlManagerView::AddResource ( HTREEITEM hParent, CResource* pRes, HTREEITEM hLastItem )
 | 
						|
{
 | 
						|
 | 
						|
   TV_INSERTSTRUCT ItemStruct;
 | 
						|
   memset( &ItemStruct, 0, sizeof(ItemStruct) );
 | 
						|
   ItemStruct.hParent = hParent;
 | 
						|
   ItemStruct.hInsertAfter = hLastItem;
 | 
						|
   ItemStruct.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_SELECTEDIMAGE | TVIF_IMAGE;
 | 
						|
   ItemStruct.item.hItem = 0;
 | 
						|
   ItemStruct.item.state = 0;
 | 
						|
   ItemStruct.item.stateMask = 0;
 | 
						|
   ItemStruct.item.pszText = (LPSTR) pRes->GetDisplayName();
 | 
						|
   ItemStruct.item.cchTextMax =  (int) strlen( ItemStruct.item.pszText );
 | 
						|
   ItemStruct.item.iImage = 2;
 | 
						|
   ItemStruct.item.iSelectedImage = 3;
 | 
						|
   ItemStruct.item.cChildren = 0;
 | 
						|
   ItemStruct.item.lParam = (long) pRes;
 | 
						|
   hLastItem = m_pTree->InsertItem( &ItemStruct );
 | 
						|
   return hLastItem;
 | 
						|
}
 | 
						|
 | 
						|
//int InsertNetResources( LPNETRESOURCE lpNetResource, CTreeCtrl *pTreeCtrl, HTREEITEM hParent, int *pnCount )
 | 
						|
//{
 | 
						|
//
 | 
						|
//   DWORD Erc;
 | 
						|
//   NETRESOURCE   *pNetRes;
 | 
						|
//   HANDLE hEnum;
 | 
						|
//
 | 
						|
//   if( !pTreeCtrl ) return -1;
 | 
						|
//   if( pnCount ) *pnCount = 0;
 | 
						|
//   Erc = WNetOpenEnum(
 | 
						|
//                  RESOURCE_GLOBALNET,//DWORD dwScope,   // scope of enumeration
 | 
						|
//                  RESOURCETYPE_ANY,//DWORD dwType,   // resource types to list
 | 
						|
//                  0,//DWORD dwUsage,   // resource usage to list
 | 
						|
//                  lpNetResource,//LPNETRESOURCE lpNetResource,   // pointer to resource structure
 | 
						|
//                  &hEnum//LPHANDLE lphEnum    // pointer to enumeration handle buffer
 | 
						|
//                  );
 | 
						|
//   if( Erc )
 | 
						|
//   {
 | 
						|
//      ShowError( Erc );
 | 
						|
//      return Erc;
 | 
						|
//   }
 | 
						|
//
 | 
						|
//
 | 
						|
//   DWORD dwBufferSize = 1024;
 | 
						|
//   pNetRes = (NETRESOURCE *)malloc( dwBufferSize );
 | 
						|
//
 | 
						|
//   while( TRUE )
 | 
						|
//   {
 | 
						|
//      DWORD dwCount = 0xFFFFFFFF;
 | 
						|
//      Erc = WNetEnumResource(
 | 
						|
//                        hEnum,//HANDLE hEnum,   // handle to enumeration
 | 
						|
//                        &dwCount,//LPDWORD lpcCount,   // pointer to entries to list
 | 
						|
//                        pNetRes,//LPVOID lpBuffer,   // pointer to buffer for results
 | 
						|
//                        &dwBufferSize//LPDWORD lpBufferSize    // pointer to buffer size variable
 | 
						|
//                        );
 | 
						|
//      if( Erc == ERROR_NO_MORE_ITEMS ) return 0;
 | 
						|
//      if( Erc )
 | 
						|
//      {
 | 
						|
//         free( pNetRes );
 | 
						|
//         pNetRes = (NETRESOURCE *)malloc( dwBufferSize );
 | 
						|
//         Erc = WNetEnumResource(
 | 
						|
//                           hEnum,//HANDLE hEnum,   // handle to enumeration
 | 
						|
//                           &dwCount,//LPDWORD lpcCount,   // pointer to entries to list
 | 
						|
//                           pNetRes,//LPVOID lpBuffer,   // pointer to buffer for results
 | 
						|
//                           &dwBufferSize//LPDWORD lpBufferSize    // pointer to buffer size variable
 | 
						|
//                           );
 | 
						|
//      }
 | 
						|
//      if( Erc ){ ShowError( Erc ); return Erc; }
 | 
						|
//
 | 
						|
//      TV_INSERTSTRUCT ItemStruct;
 | 
						|
//      HTREEITEM hLastItem = TVI_FIRST;
 | 
						|
//      DWORD i;
 | 
						|
//
 | 
						|
//      if( pnCount ) *pnCount += dwCount;
 | 
						|
//      for( i=0; i<dwCount; i++ )
 | 
						|
//      {
 | 
						|
//         memset( &ItemStruct, 0, sizeof(ItemStruct) );
 | 
						|
//         ItemStruct.hParent = hParent;
 | 
						|
//         ItemStruct.hInsertAfter = hLastItem;
 | 
						|
//         ItemStruct.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_SELECTEDIMAGE | TVIF_IMAGE;
 | 
						|
//         ItemStruct.item.hItem = 0;
 | 
						|
//         ItemStruct.item.state = 0;
 | 
						|
//         ItemStruct.item.stateMask = 0;
 | 
						|
//         ItemStruct.item.pszText = pNetRes[i].lpRemoteName;
 | 
						|
//         ItemStruct.item.cchTextMax = strlen( ItemStruct.item.pszText );
 | 
						|
//         ItemStruct.item.iImage = 2;
 | 
						|
//         ItemStruct.item.iSelectedImage = 3;
 | 
						|
//         ItemStruct.item.cChildren = 0;
 | 
						|
//         ItemStruct.item.lParam = (long) (new CNetResource( &pNetRes[i] ));
 | 
						|
//
 | 
						|
//         hLastItem = pTreeCtrl->InsertItem( &ItemStruct );
 | 
						|
//      }
 | 
						|
//   }//end while()
 | 
						|
//
 | 
						|
//   WNetCloseEnum( hEnum );
 | 
						|
//   free( pNetRes );
 | 
						|
//   return Erc;
 | 
						|
//}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
static void print_top(MYSQL_RES *result)
 | 
						|
{
 | 
						|
   uint length;
 | 
						|
   MYSQL_FIELD *field;
 | 
						|
   mysql_field_seek(result,0);
 | 
						|
   while ((field = mysql_fetch_field(result)))
 | 
						|
   {
 | 
						|
      if ((length= (uint) strlen(field->name)) > field->max_length)
 | 
						|
         field->max_length=length;
 | 
						|
      else
 | 
						|
         length=field->max_length;
 | 
						|
   }
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
static void print_header(MYSQL_RES *result,CStringArray& rg)
 | 
						|
{
 | 
						|
   MYSQL_FIELD *field;
 | 
						|
   print_top(result);
 | 
						|
   mysql_field_seek(result,0);
 | 
						|
   while ((field = mysql_fetch_field(result)))
 | 
						|
   {
 | 
						|
//    printf(" %-*s|",field->max_length+1,field->name);
 | 
						|
      rg.Add(field->name);
 | 
						|
   }
 | 
						|
   print_top(result);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
static void print_row(MYSQL_RES *result,MYSQL_ROW row,CStringArray& rg)
 | 
						|
{
 | 
						|
   uint i,length;
 | 
						|
   MYSQL_FIELD *field;
 | 
						|
   mysql_field_seek(result,0);
 | 
						|
   for (i=0 ; i < mysql_num_fields(result); i++)
 | 
						|
   {
 | 
						|
      field = mysql_fetch_field(result);
 | 
						|
      length=field->max_length;
 | 
						|
      rg.Add(row[i] ? (char*) row[i] : "");
 | 
						|
//    printf(" %-*s|",length+1,row[i] ? (char*) row[i] : "");
 | 
						|
   }
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CMySqlManagerView::ProcessResultSet ( HTREEITEM hItem, LPVOID r, CResource* pResource )
 | 
						|
{
 | 
						|
 | 
						|
   MYSQL_RES* result = (MYSQL_RES *) r;
 | 
						|
   MYSQL_ROW row;
 | 
						|
 | 
						|
   switch (pResource->GetType())
 | 
						|
   {
 | 
						|
      case CResource::eProcesslist:
 | 
						|
         {
 | 
						|
            CResourceProcesslist* p = (CResourceProcesslist*) pResource;
 | 
						|
            CResourceProcesslistItem* pi = new CResourceProcesslistItem ();
 | 
						|
            CString strText;
 | 
						|
            print_header(result,p->m_rgFields);
 | 
						|
            for (int i = 0; i<p->m_rgFields.GetSize(); i++ )
 | 
						|
            {
 | 
						|
               strText += p->m_rgFields[i];
 | 
						|
               strText += " ";
 | 
						|
            }
 | 
						|
            pi->m_strName = strText;
 | 
						|
            AddResource ( hItem, pi );
 | 
						|
            for (int index=0;(row=mysql_fetch_row(result));index++)
 | 
						|
            {
 | 
						|
               pi = new CResourceProcesslistItem ();
 | 
						|
               print_row(result,row,pi->m_rgFields);
 | 
						|
               strText.Empty();
 | 
						|
               for (int i = 0; i<pi->m_rgFields.GetSize(); i++ )
 | 
						|
               {
 | 
						|
                  strText += pi->m_rgFields[i];
 | 
						|
                  strText += " ";
 | 
						|
               }
 | 
						|
               pi->m_strName = strText;
 | 
						|
               AddResource ( hItem, pi );
 | 
						|
            }
 | 
						|
            print_top(result);
 | 
						|
            break;
 | 
						|
         }
 | 
						|
      case CResource::eServer:
 | 
						|
         {
 | 
						|
            CResourceServer* p = (CResourceServer*) pResource;
 | 
						|
            CResourceDatabase* pi = new CResourceDatabase ();
 | 
						|
            CString strText;
 | 
						|
            /* print_header(result,p->m_rgFields); */
 | 
						|
            for (int i = 0; i<p->m_rgFields.GetSize(); i++ )
 | 
						|
            {
 | 
						|
               strText += p->m_rgFields[i];
 | 
						|
               strText += " ";
 | 
						|
            }
 | 
						|
            pi->m_strName = strText;
 | 
						|
            /* AddResource ( hItem, pi ); */
 | 
						|
            for (int index=0;(row=mysql_fetch_row(result));index++)
 | 
						|
            {
 | 
						|
               pi = new CResourceDatabase ();
 | 
						|
               print_row(result,row,pi->m_rgFields);
 | 
						|
               strText.Empty();
 | 
						|
               for (int i = 0; i<pi->m_rgFields.GetSize(); i++ )
 | 
						|
               {
 | 
						|
                  strText += pi->m_rgFields[i];
 | 
						|
                  strText += " ";
 | 
						|
               }
 | 
						|
               pi->m_strName = strText;
 | 
						|
               AddResource ( hItem, pi );
 | 
						|
            }
 | 
						|
            print_top(result);
 | 
						|
            break;
 | 
						|
         }
 | 
						|
      case CResource::eDatabase:
 | 
						|
         {
 | 
						|
            CResourceDatabase* p = (CResourceDatabase*) pResource;
 | 
						|
            CResourceTable* pi = new CResourceTable ();
 | 
						|
            CString strText;
 | 
						|
            /* print_header(result,p->m_rgFields); */
 | 
						|
            for (int i = 0; i<p->m_rgFields.GetSize(); i++ )
 | 
						|
            {
 | 
						|
               strText += p->m_rgFields[i];
 | 
						|
               strText += " ";
 | 
						|
            }
 | 
						|
            pi->m_strName = strText;
 | 
						|
            /* AddResource ( hItem, pi ); */
 | 
						|
            for (int index=0;(row=mysql_fetch_row(result));index++)
 | 
						|
            {
 | 
						|
               pi = new CResourceTable ();
 | 
						|
               print_row(result,row,pi->m_rgFields);
 | 
						|
               strText.Empty();
 | 
						|
               for (int i = 0; i<pi->m_rgFields.GetSize(); i++ )
 | 
						|
               {
 | 
						|
                  strText += pi->m_rgFields[i];
 | 
						|
                  strText += " ";
 | 
						|
               }
 | 
						|
               pi->m_strName = strText;
 | 
						|
               AddResource ( hItem, pi );
 | 
						|
            }
 | 
						|
            print_top(result);
 | 
						|
            break;
 | 
						|
         }
 | 
						|
      case CResource::eTable:
 | 
						|
         {
 | 
						|
            CResourceTable* p = (CResourceTable*) pResource;
 | 
						|
            CResourceField* pi = new CResourceField ();
 | 
						|
            CString strText;
 | 
						|
            /* print_header(result,p->m_rgFields); */
 | 
						|
            for (int i = 0; i<p->m_rgFields.GetSize(); i++ )
 | 
						|
            {
 | 
						|
               strText += p->m_rgFields[i];
 | 
						|
               strText += " ";
 | 
						|
            }
 | 
						|
            pi->m_strName = strText;
 | 
						|
            /* AddResource ( hItem, pi ); */
 | 
						|
            for (int index=0;(row=mysql_fetch_row(result));index++)
 | 
						|
            {
 | 
						|
               pi = new CResourceField ();
 | 
						|
               print_row(result,row,pi->m_rgFields);
 | 
						|
               strText.Empty();
 | 
						|
               for (int i = 0; i<pi->m_rgFields.GetSize(); i++ )
 | 
						|
               {
 | 
						|
                  strText += pi->m_rgFields[i];
 | 
						|
                  strText += " ";
 | 
						|
               }
 | 
						|
               pi->m_strName = strText;
 | 
						|
               AddResource ( hItem, pi );
 | 
						|
            }
 | 
						|
            print_top(result);
 | 
						|
            break;
 | 
						|
         }
 | 
						|
   }
 | 
						|
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
CResource* CMySqlManagerView::GetSelectedResource(HTREEITEM* phItemRet)
 | 
						|
{
 | 
						|
   CResource* pResource = NULL;
 | 
						|
   HTREEITEM  hItem = m_pTree->GetSelectedItem();
 | 
						|
   if ( hItem )
 | 
						|
   {
 | 
						|
      TV_ITEM item;
 | 
						|
      memset( &item, 0, sizeof(TV_ITEM) );
 | 
						|
      item.hItem = hItem;
 | 
						|
      item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
 | 
						|
      m_pTree->GetItem( &item );
 | 
						|
      if ( item.lParam )
 | 
						|
      {
 | 
						|
         pResource = (CResource*) item.lParam;
 | 
						|
      }
 | 
						|
   }
 | 
						|
   if (phItemRet)
 | 
						|
   {
 | 
						|
      *phItemRet = hItem;
 | 
						|
   }
 | 
						|
   return pResource;
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
CResourceServer* CMySqlManagerView::GetServerResource(HTREEITEM hItem)
 | 
						|
{
 | 
						|
 | 
						|
   TV_ITEM item;
 | 
						|
 | 
						|
   memset( &item, 0, sizeof(TV_ITEM) );
 | 
						|
   item.hItem = hItem;
 | 
						|
   item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
 | 
						|
   m_pTree->GetItem( &item );
 | 
						|
   if ( !item.lParam ) return NULL;
 | 
						|
 | 
						|
   CResource* pResource = (CResource*) item.lParam;
 | 
						|
 | 
						|
   switch (pResource->GetType())
 | 
						|
   {
 | 
						|
      case CResource::eServer:
 | 
						|
         {
 | 
						|
            return (CResourceServer*) pResource;
 | 
						|
         }
 | 
						|
      case CResource::eDatabase:
 | 
						|
         {
 | 
						|
            HTREEITEM hParent = m_pTree->GetParentItem(hItem);
 | 
						|
            memset( &item, 0, sizeof(TV_ITEM) );
 | 
						|
            item.hItem = hParent;
 | 
						|
            item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
 | 
						|
            m_pTree->GetItem( &item );
 | 
						|
            if ( !item.lParam ) return NULL;
 | 
						|
            return (CResourceServer*) item.lParam;
 | 
						|
         }
 | 
						|
      case CResource::eTable:
 | 
						|
         {
 | 
						|
            HTREEITEM hParent = m_pTree->GetParentItem(m_pTree->GetParentItem(hItem));
 | 
						|
            memset( &item, 0, sizeof(TV_ITEM) );
 | 
						|
            item.hItem = hParent;
 | 
						|
            item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
 | 
						|
            m_pTree->GetItem( &item );
 | 
						|
            if ( !item.lParam ) return NULL;
 | 
						|
            return (CResourceServer*) item.lParam;
 | 
						|
         }
 | 
						|
   }
 | 
						|
 | 
						|
   return NULL;
 | 
						|
 | 
						|
}
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CMySqlManagerView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult)
 | 
						|
{
 | 
						|
   HTREEITEM hItem;
 | 
						|
   hItem = m_pTree->GetSelectedItem();
 | 
						|
   *pResult = 0;
 | 
						|
   if ( !hItem ) return;
 | 
						|
 | 
						|
   TV_ITEM item;
 | 
						|
   memset( &item, 0, sizeof(TV_ITEM) );
 | 
						|
   item.hItem = hItem;
 | 
						|
   item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
 | 
						|
   m_pTree->GetItem( &item );
 | 
						|
 | 
						|
   if ( ! item.lParam ) return;
 | 
						|
 | 
						|
   if ( item.cChildren ) return; //if has got children expand only
 | 
						|
 | 
						|
   CWaitCursor x;
 | 
						|
 | 
						|
   CResource* pResource = (CResource*) item.lParam;
 | 
						|
 | 
						|
   MYSQL mysql;
 | 
						|
   MYSQL_RES *result;
 | 
						|
 | 
						|
   switch (pResource->GetType())
 | 
						|
   {
 | 
						|
      case CResource::eProcesslist:
 | 
						|
         {
 | 
						|
            XStatus x ( "Connecting to server %s on host %s..."
 | 
						|
                        , (LPCTSTR) pResource->GetDisplayName()
 | 
						|
                        , (LPCTSTR) pResource->GetHostName()
 | 
						|
                      );
 | 
						|
            mysql_init(&mysql);
 | 
						|
            if (!mysql_real_connect(&mysql,pResource->GetHostName(), pResource->GetUserName(),pResource->GetPassword(),0,pResource->GetPortNumber(), NullS,0))
 | 
						|
            {
 | 
						|
					PostMessage(WM_COMMAND,IDM_TOOLS_SERVER_PROPERTIES);
 | 
						|
               return;
 | 
						|
            }
 | 
						|
            if (!(result=mysql_list_processes(&mysql)))
 | 
						|
            {
 | 
						|
               return;
 | 
						|
            }
 | 
						|
            ProcessResultSet ( hItem, result, pResource );
 | 
						|
            mysql_free_result(result);
 | 
						|
            mysql_close(&mysql);
 | 
						|
            break;
 | 
						|
         }
 | 
						|
      case CResource::eServer:
 | 
						|
         {
 | 
						|
            MainFrame->StatusMsg ( "Connecting to server %s on host %s..."
 | 
						|
                                   , (LPCTSTR) pResource->GetDisplayName()
 | 
						|
                                   , (LPCTSTR) pResource->GetHostName()
 | 
						|
                                 );
 | 
						|
            mysql_init(&mysql);
 | 
						|
            if (!mysql_real_connect(&mysql,pResource->GetHostName(), pResource->GetUserName(),pResource->GetPassword(),0,pResource->GetPortNumber(), NullS,0))
 | 
						|
            {
 | 
						|
					PostMessage(WM_COMMAND,IDM_TOOLS_SERVER_PROPERTIES);
 | 
						|
               MainFrame->StatusMsg ( "Error: Connecting to server %s... (%s)"
 | 
						|
                                      , (LPCTSTR) pResource->GetDisplayName()
 | 
						|
                                      , mysql_error(&mysql)
 | 
						|
                                    );
 | 
						|
               return;
 | 
						|
            }
 | 
						|
            if (!(result=mysql_list_dbs(&mysql,0)))
 | 
						|
            {
 | 
						|
            }
 | 
						|
            ProcessResultSet ( hItem, result, pResource );
 | 
						|
            mysql_free_result(result);
 | 
						|
            mysql_close(&mysql);
 | 
						|
            MainFrame->StatusMsg ( " " );
 | 
						|
            break;
 | 
						|
         }
 | 
						|
      case CResource::eDatabase:
 | 
						|
         {
 | 
						|
            CResourceServer* pServer = GetServerResource(hItem);
 | 
						|
            if (!pServer) return;
 | 
						|
            MainFrame->StatusMsg ( "Connecting to server %s on host %s..."
 | 
						|
                                   , (LPCTSTR) pServer->GetDisplayName()
 | 
						|
                                   , (LPCTSTR) pServer->GetHostName()
 | 
						|
                                 );
 | 
						|
            mysql_init(&mysql);
 | 
						|
            if (!mysql_real_connect(&mysql,pServer->GetHostName(), pServer->GetUserName(),pServer->GetPassword(),0,pServer->GetPortNumber(), NullS,0))
 | 
						|
            {
 | 
						|
					PostMessage(WM_COMMAND,IDM_TOOLS_SERVER_PROPERTIES);
 | 
						|
               MainFrame->StatusMsg ( "Error: Connecting to server %s... (%s)"
 | 
						|
                                      , (LPCTSTR) pServer->GetDisplayName()
 | 
						|
                                      , mysql_error(&mysql)
 | 
						|
                                    );
 | 
						|
               return;
 | 
						|
            }
 | 
						|
            CResourceDatabase* pRes = (CResourceDatabase*) pResource;
 | 
						|
            CString strDB = pResource->GetDisplayName();
 | 
						|
            strDB.TrimRight();
 | 
						|
            if (mysql_select_db(&mysql,strDB))
 | 
						|
            {
 | 
						|
               MainFrame->StatusMsg ( "Error: Selecting database %s... (%s)"
 | 
						|
                                      , (LPCTSTR) strDB
 | 
						|
                                      , mysql_error(&mysql)
 | 
						|
                                    );
 | 
						|
               return;
 | 
						|
            }
 | 
						|
            if (!(result=mysql_list_tables(&mysql,0)))
 | 
						|
            {
 | 
						|
            }
 | 
						|
            ProcessResultSet ( hItem, result, pRes );
 | 
						|
            mysql_free_result(result);
 | 
						|
            mysql_close(&mysql);
 | 
						|
            MainFrame->StatusMsg ( " " );
 | 
						|
            break;
 | 
						|
         }
 | 
						|
      case CResource::eTable:
 | 
						|
         {
 | 
						|
            CResourceServer* pServer = GetServerResource(hItem);
 | 
						|
            if (!pServer) return;
 | 
						|
            MainFrame->StatusMsg ( "Connecting to server %s on host %s..."
 | 
						|
                                   , (LPCTSTR) pServer->GetDisplayName()
 | 
						|
                                   , (LPCTSTR) pServer->GetHostName()
 | 
						|
                                 );
 | 
						|
            mysql_init(&mysql);
 | 
						|
            if (!mysql_real_connect(&mysql,pServer->GetHostName(), pServer->GetUserName(),pServer->GetPassword(),0,pServer->GetPortNumber(), NullS,0))
 | 
						|
            {
 | 
						|
					PostMessage(WM_COMMAND,IDM_TOOLS_SERVER_PROPERTIES);
 | 
						|
               MainFrame->StatusMsg ( "Error: Connecting to server %s... (%s)"
 | 
						|
                                      , (LPCTSTR) pServer->GetDisplayName()
 | 
						|
                                      , mysql_error(&mysql)
 | 
						|
                                    );
 | 
						|
               return;
 | 
						|
            }
 | 
						|
            HTREEITEM hParent = m_pTree->GetParentItem(hItem);
 | 
						|
            memset( &item, 0, sizeof(TV_ITEM) );
 | 
						|
            item.hItem = hParent;
 | 
						|
            item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
 | 
						|
            m_pTree->GetItem( &item );
 | 
						|
            if ( item.lParam )
 | 
						|
            {
 | 
						|
               CResourceDatabase* pResDatabase = (CResourceDatabase*) item.lParam;
 | 
						|
               CResourceTable* pRes = (CResourceTable*) pResource;
 | 
						|
               CString strDB = pResDatabase->GetDisplayName();
 | 
						|
               CString strTable = pResource->GetDisplayName();
 | 
						|
               strDB.TrimRight();
 | 
						|
               strTable.TrimRight();
 | 
						|
               if (mysql_select_db(&mysql,strDB))
 | 
						|
               {
 | 
						|
                  return;
 | 
						|
               }
 | 
						|
               CString str; str.Format("show fields from %s",(LPCTSTR)strTable);
 | 
						|
               if ( mysql_query(&mysql,str)==0 )
 | 
						|
               {
 | 
						|
                  MYSQL_RES *result;
 | 
						|
                  if ((result=mysql_store_result(&mysql)))
 | 
						|
                  {
 | 
						|
                     ProcessResultSet ( hItem, result, pRes );
 | 
						|
                     mysql_free_result(result);
 | 
						|
                  }
 | 
						|
               }
 | 
						|
            }
 | 
						|
            mysql_close(&mysql);
 | 
						|
            break;
 | 
						|
         }
 | 
						|
   }
 | 
						|
 | 
						|
//  InsertNetResources( (LPNETRESOURCE)pTvItem->lParam,
 | 
						|
//                 &m_TreeCtrl,
 | 
						|
//                 hItem,
 | 
						|
//                 &pTvItem->cChildren );
 | 
						|
//  pTvItem->mask = TVIF_CHILDREN;
 | 
						|
//  m_TreeCtrl.SetItem( pTvItem );
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CMySqlManagerView::OnRefresh()
 | 
						|
{
 | 
						|
   HTREEITEM hItem = NULL;
 | 
						|
   CResource* pResource = GetSelectedResource(&hItem);
 | 
						|
   if (pResource&&hItem)
 | 
						|
   {
 | 
						|
      switch (pResource->GetType())
 | 
						|
      {
 | 
						|
         case CResource::eTable:
 | 
						|
            {
 | 
						|
 | 
						|
               TV_ITEM item;
 | 
						|
               MYSQL mysql;
 | 
						|
//             MYSQL_RES *result;
 | 
						|
 | 
						|
               HTREEITEM hParent = m_pTree->GetParentItem(hItem);
 | 
						|
 | 
						|
               HTREEITEM hChild = m_pTree->GetChildItem(hItem);
 | 
						|
               while (hChild)
 | 
						|
               {
 | 
						|
                  HTREEITEM h = m_pTree->GetNextSiblingItem(hChild);
 | 
						|
                  BOOL b = m_pTree->DeleteItem(hChild);
 | 
						|
                  hChild = h;
 | 
						|
               }
 | 
						|
               mysql_init(&mysql);
 | 
						|
               if (!mysql_real_connect(&mysql,pResource->GetHostName(), pResource->GetUserName(),pResource->GetPassword(),0,pResource->GetPortNumber(), NullS,0))
 | 
						|
               {
 | 
						|
                  return;
 | 
						|
               }
 | 
						|
               memset( &item, 0, sizeof(TV_ITEM) );
 | 
						|
               item.hItem = hParent;
 | 
						|
               item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
 | 
						|
               m_pTree->GetItem( &item );
 | 
						|
               if ( item.lParam )
 | 
						|
               {
 | 
						|
                  CResourceDatabase* pResDatabase = (CResourceDatabase*) item.lParam;
 | 
						|
                  CResourceTable* pRes = (CResourceTable*) pResource;
 | 
						|
                  CString strDB = pResDatabase->GetDisplayName();
 | 
						|
                  CString strTable = pResource->GetDisplayName();
 | 
						|
                  strDB.TrimRight();
 | 
						|
                  strTable.TrimRight();
 | 
						|
                  if (mysql_select_db(&mysql,strDB))
 | 
						|
                  {
 | 
						|
                     return;
 | 
						|
                  }
 | 
						|
                  CString str; str.Format("show fields from %s",(LPCTSTR)strTable);
 | 
						|
                  if ( mysql_query(&mysql,str)==0 )
 | 
						|
                  {
 | 
						|
                     MYSQL_RES *result;
 | 
						|
                     if ((result=mysql_store_result(&mysql)))
 | 
						|
                     {
 | 
						|
                        ProcessResultSet ( hItem, result, pRes );
 | 
						|
                        mysql_free_result(result);
 | 
						|
                     }
 | 
						|
                  }
 | 
						|
               }
 | 
						|
               mysql_close(&mysql);
 | 
						|
               break;
 | 
						|
            }
 | 
						|
      }
 | 
						|
   }
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CMySqlManagerView::OnRegisterServer()
 | 
						|
{
 | 
						|
   CRegisterServer dlg;
 | 
						|
   if (dlg.DoModal()!=IDOK) return;
 | 
						|
   AddResource (
 | 
						|
               TVI_ROOT,
 | 
						|
               new CResourceServer ( dlg.m_strServer, dlg.m_strHost, dlg.m_strUser, dlg.m_strPassword, dlg.m_strPort )
 | 
						|
               );
 | 
						|
}
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CMySqlManagerView::OnServerProperties()
 | 
						|
{
 | 
						|
   HTREEITEM hItem;
 | 
						|
   CResource* pRes = GetSelectedResource(&hItem);
 | 
						|
   if (!pRes) return;
 | 
						|
   if (pRes->GetType()!=CResource::eServer) return;
 | 
						|
   CResourceServer* pResource = (CResourceServer*)pRes;
 | 
						|
   CRegisterServer dlg;
 | 
						|
   dlg.m_strHost       = pResource->GetHostName();
 | 
						|
   dlg.m_strUser       = pResource->GetUserName();
 | 
						|
   dlg.m_strPassword   = pResource->GetPassword();
 | 
						|
   dlg.m_strPort       = pResource->GetPortName();
 | 
						|
   if (dlg.DoModal()!=IDOK) return;
 | 
						|
   pResource->m_strHost     = dlg.m_strHost    ;
 | 
						|
   pResource->m_strUser     = dlg.m_strUser    ;
 | 
						|
   pResource->m_strPassword = dlg.m_strPassword;
 | 
						|
   pResource->m_strPort     = dlg.m_strPort    ;
 | 
						|
   TV_ITEM item;
 | 
						|
   memset( &item, 0, sizeof(TV_ITEM) );
 | 
						|
   item.hItem = hItem;
 | 
						|
   item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
 | 
						|
   m_pTree->GetItem( &item );
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
void CMySqlManagerView::OnSqlToolQuery()
 | 
						|
{
 | 
						|
 | 
						|
   HTREEITEM hItem;
 | 
						|
 | 
						|
   CResource* pResource = GetSelectedResource(&hItem);
 | 
						|
 | 
						|
   if (!pResource) return;
 | 
						|
 | 
						|
   CResourceServer* pServer = GetServerResource(hItem);
 | 
						|
   if (!pServer) return; /* Avoid bug when selecting field */
 | 
						|
 | 
						|
   m_pTool = new CToolSql ( AfxGetMainWnd(), pServer, pResource );
 | 
						|
 | 
						|
   if ( ! m_pTool->Create(IDD_TOOL_SQL,this) )
 | 
						|
   {
 | 
						|
      delete m_pTool;
 | 
						|
      m_pTool = 0;
 | 
						|
		PostMessage(WM_COMMAND,IDM_TOOLS_SERVER_PROPERTIES);
 | 
						|
   }
 | 
						|
   else
 | 
						|
   {
 | 
						|
      m_pTool->ShowWindow(SW_SHOW);
 | 
						|
   }
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
BOOL CMySqlManagerView::PreTranslateMessage(MSG* pMsg)
 | 
						|
{
 | 
						|
   if (m_pTool && m_pTool->PreTranslateMessage(pMsg))
 | 
						|
      return TRUE;
 | 
						|
   return CTreeView::PreTranslateMessage(pMsg);
 | 
						|
}
 | 
						|
 | 
						|
void CMySqlManagerView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
 | 
						|
{
 | 
						|
 | 
						|
   POINT pt;
 | 
						|
 | 
						|
   GetCursorPos ( & pt );
 | 
						|
 | 
						|
   CMenu menu;
 | 
						|
 | 
						|
   menu.CreatePopupMenu ();
 | 
						|
 | 
						|
   menu.AppendMenu ( MF_ENABLED , IDM_SQL_TOOL_QUERY,          "SQL Query" );
 | 
						|
   menu.AppendMenu ( MF_ENABLED , IDM_REFRESH,                 "Refresh active item(s)" );
 | 
						|
   menu.AppendMenu ( MF_ENABLED , IDM_TOOLS_REGISTER_SERVER,   "Register server" );
 | 
						|
   menu.AppendMenu ( MF_ENABLED , IDM_TOOLS_SERVER_PROPERTIES, "Properties" );
 | 
						|
 | 
						|
   menu.TrackPopupMenu ( TPM_LEFTALIGN | TPM_RIGHTBUTTON , pt.x, pt.y, CWnd::GetParent(), NULL );
 | 
						|
 | 
						|
   *pResult = 0;
 | 
						|
 | 
						|
}
 |