mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 05:22:25 +01:00
849 lines
27 KiB
C++
849 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;
|
|
|
|
}
|