mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 15:50:51 +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;
 | |
| 
 | |
| }
 |