diff options
author | unknown <vva@genie.(none)> | 2002-10-08 16:55:39 +0500 |
---|---|---|
committer | unknown <vva@genie.(none)> | 2002-10-08 16:55:39 +0500 |
commit | efacfcade07a9f75bfa801d109829a52a1666e17 (patch) | |
tree | c35145132bb2cfb26c84dd735ef5ea029b423ca6 /VC++Files | |
parent | 8ff88bb9405c9be226de970a8ffba19809d8961b (diff) | |
download | mariadb-git-efacfcade07a9f75bfa801d109829a52a1666e17.tar.gz |
additions for compiling for Win via samba
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
Diffstat (limited to 'VC++Files')
46 files changed, 4761 insertions, 24 deletions
diff --git a/VC++Files/mysqlbinlog/mysqlbinlog.dsp b/VC++Files/mysqlbinlog/mysqlbinlog.dsp index 94723b0a127..5d3ff2bb090 100644 --- a/VC++Files/mysqlbinlog/mysqlbinlog.dsp +++ b/VC++Files/mysqlbinlog/mysqlbinlog.dsp @@ -42,7 +42,7 @@ RSC=rc.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../" /I "../sql" /D "NDEBUG" /D "DBUG_OFF" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /D "MYSQL_SERVER" /FD /c +# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../" /I "../client" /D "NDEBUG" /D "DBUG_OFF" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /D "MYSQL_SERVER" /FD /c # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe @@ -67,7 +67,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /G6 /MTd /W3 /Gm /ZI /Od /I "../include" /I "../" /I "../sql" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /D "MYSQL_SERVER" /FD /c +# ADD CPP /nologo /G6 /MTd /W3 /Gm /ZI /Od /I "../include" /I "../" /I "../client" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /D "MYSQL_SERVER" /FD /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe @@ -88,7 +88,7 @@ LINK32=link.exe # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File -SOURCE=..\client\mysqlbinlog.cpp +SOURCE=.\mysqlbinlog.cpp # End Source File # End Group # Begin Group "Header Files" diff --git a/VC++Files/mysqlmanager/CHILDFRM.CPP b/VC++Files/mysqlmanager/CHILDFRM.CPP new file mode 100644 index 00000000000..08027e068ac --- /dev/null +++ b/VC++Files/mysqlmanager/CHILDFRM.CPP @@ -0,0 +1,65 @@ +// ChildFrm.cpp : implementation of the CChildFrame class +// + +#include "stdafx.h" +#include "MySqlManager.h" + +#include "ChildFrm.h" + +#ifdef _DEBUG + #define new DEBUG_NEW + #undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +///////////////////////////////////////////////////////////////////////////// +// CChildFrame + +IMPLEMENT_DYNCREATE(CChildFrame, CMDIChildWnd) + +BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd) +//{{AFX_MSG_MAP(CChildFrame) +// NOTE - the ClassWizard will add and remove mapping macros here. +// DO NOT EDIT what you see in these blocks of generated code ! +//}}AFX_MSG_MAP +END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// +// CChildFrame construction/destruction + +CChildFrame::CChildFrame() +{ + // TODO: add member initialization code here + +} + +CChildFrame::~CChildFrame() +{ +} + +BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs) +{ + // TODO: Modify the Window class or styles here by modifying + // the CREATESTRUCT cs + + return CMDIChildWnd::PreCreateWindow(cs); +} + +///////////////////////////////////////////////////////////////////////////// +// CChildFrame diagnostics + +#ifdef _DEBUG +void CChildFrame::AssertValid() const +{ + CMDIChildWnd::AssertValid(); +} + +void CChildFrame::Dump(CDumpContext& dc) const +{ + CMDIChildWnd::Dump(dc); +} + +#endif //_DEBUG + +///////////////////////////////////////////////////////////////////////////// +// CChildFrame message handlers diff --git a/VC++Files/mysqlmanager/CHILDFRM.H b/VC++Files/mysqlmanager/CHILDFRM.H new file mode 100644 index 00000000000..3075be58a67 --- /dev/null +++ b/VC++Files/mysqlmanager/CHILDFRM.H @@ -0,0 +1,52 @@ +// ChildFrm.h : interface of the CChildFrame class +// +///////////////////////////////////////////////////////////////////////////// + +#if !defined(AFX_CHILDFRM_H__826CB2F0_8B6D_11D1_AEC1_00600806E071__INCLUDED_) +#define AFX_CHILDFRM_H__826CB2F0_8B6D_11D1_AEC1_00600806E071__INCLUDED_ + +#if _MSC_VER >= 1000 +#pragma once +#endif // _MSC_VER >= 1000 + +class CChildFrame : public CMDIChildWnd +{ + DECLARE_DYNCREATE(CChildFrame) +public: + CChildFrame(); + +// Attributes +public: + +// Operations +public: + +// Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CChildFrame) + virtual BOOL PreCreateWindow(CREATESTRUCT& cs); + //}}AFX_VIRTUAL + +// Implementation +public: + virtual ~CChildFrame(); +#ifdef _DEBUG + virtual void AssertValid() const; + virtual void Dump(CDumpContext& dc) const; +#endif + +// Generated message map functions +protected: + //{{AFX_MSG(CChildFrame) + // NOTE - the ClassWizard will add and remove member functions here. + // DO NOT EDIT what you see in these blocks of generated code! + //}}AFX_MSG + DECLARE_MESSAGE_MAP() +}; + +///////////////////////////////////////////////////////////////////////////// + +//{{AFX_INSERT_LOCATION}} +// Microsoft Developer Studio will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_CHILDFRM_H__826CB2F0_8B6D_11D1_AEC1_00600806E071__INCLUDED_) diff --git a/VC++Files/mysqlmanager/MAINFRM.CPP b/VC++Files/mysqlmanager/MAINFRM.CPP new file mode 100644 index 00000000000..499704ed2a0 --- /dev/null +++ b/VC++Files/mysqlmanager/MAINFRM.CPP @@ -0,0 +1,137 @@ +// MainFrm.cpp : implementation of the CMainFrame class +// + +#include "stdafx.h" +#include "MySqlManager.h" +#include "MainFrm.h" + +CMainFrame* CMainFrame::g_pMainFrame = NULL; + +#ifdef _DEBUG + #define new DEBUG_NEW + #undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +///////////////////////////////////////////////////////////////////////////// +// CMainFrame + +IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd) + +BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd) +//{{AFX_MSG_MAP(CMainFrame) +// NOTE - the ClassWizard will add and remove mapping macros here. +// DO NOT EDIT what you see in these blocks of generated code ! + ON_WM_CREATE() +//}}AFX_MSG_MAP +END_MESSAGE_MAP() + +static UINT indicators[] = +{ + ID_SEPARATOR, // status line indicator + ID_INDICATOR_CAPS, + ID_INDICATOR_NUM, + ID_INDICATOR_SCRL, +}; + +///////////////////////////////////////////////////////////////////////////// +// CMainFrame construction/destruction + +CMainFrame::CMainFrame() +{ + // TODO: add member initialization code here + +} + +CMainFrame::~CMainFrame() +{ +} + +int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) +{ + if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) + return -1; + + if (!m_wndToolBar.Create(this) || + !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) + { + TRACE0("Failed to create toolbar\n"); + return -1; // fail to create + } + + if (!m_wndStatusBar.Create(this) || + !m_wndStatusBar.SetIndicators(indicators, + sizeof(indicators)/sizeof(UINT))) + { + TRACE0("Failed to create status bar\n"); + return -1; // fail to create + } + + // TODO: Remove this if you don't want tool tips or a resizeable toolbar + m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | + CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); + + // TODO: Delete these three lines if you don't want the toolbar to + // be dockable + m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); + EnableDocking(CBRS_ALIGN_ANY); + DockControlBar(&m_wndToolBar); + + return 0; +} + +BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) +{ + // TODO: Modify the Window class or styles here by modifying + // the CREATESTRUCT cs + + return CMDIFrameWnd::PreCreateWindow(cs); +} + +///////////////////////////////////////////////////////////////////////////// +// CMainFrame diagnostics + +#ifdef _DEBUG +void CMainFrame::AssertValid() const +{ + CMDIFrameWnd::AssertValid(); +} + +void CMainFrame::Dump(CDumpContext& dc) const +{ + CMDIFrameWnd::Dump(dc); +} + +#endif //_DEBUG + +///////////////////////////////////////////////////////////////////////////// +// CMainFrame message handlers + +int CMainFrame::StatusMsg ( LPCSTR fmt, ... ) + +{ + + char buf [2048]; + va_list args; + va_start(args, fmt); + int ret = vsprintf(buf, fmt, args); + + if ( this != NULL ) + { + static char g_StatusMsg_Buffer_TT [ 2048 ]; + memcpy ( g_StatusMsg_Buffer_TT, buf, sizeof(g_StatusMsg_Buffer_TT) ); + m_wndStatusBar.SetPaneText ( 0, buf ); + m_wndStatusBar.UpdateWindow (); + } + + va_end(args); + return ( ret ); + +} + + +BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) +{ + g_pMainFrame = this; + return CMDIFrameWnd::OnCreateClient(lpcs, pContext); +} diff --git a/VC++Files/mysqlmanager/MAINFRM.H b/VC++Files/mysqlmanager/MAINFRM.H new file mode 100644 index 00000000000..06c51965bb1 --- /dev/null +++ b/VC++Files/mysqlmanager/MAINFRM.H @@ -0,0 +1,69 @@ +// MainFrm.h : interface of the CMainFrame class +// +///////////////////////////////////////////////////////////////////////////// + +#if !defined(AFX_MAINFRM_H__826CB2EE_8B6D_11D1_AEC1_00600806E071__INCLUDED_) +#define AFX_MAINFRM_H__826CB2EE_8B6D_11D1_AEC1_00600806E071__INCLUDED_ + +#if _MSC_VER >= 1000 +#pragma once +#endif // _MSC_VER >= 1000 + +class CMainFrame : public CMDIFrameWnd +{ + DECLARE_DYNAMIC(CMainFrame) +public: + CMainFrame(); + +// Attributes +public: + +// Operations +public: + +// Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CMainFrame) + public: + virtual BOOL PreCreateWindow(CREATESTRUCT& cs); + protected: + virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext); + //}}AFX_VIRTUAL + +// Implementation +public: + virtual ~CMainFrame(); +#ifdef _DEBUG + virtual void AssertValid() const; + virtual void Dump(CDumpContext& dc) const; +#endif + + int StatusMsg ( LPCSTR fmt, ... ); + +protected: // control bar embedded members + CStatusBar m_wndStatusBar; + CToolBar m_wndToolBar; + +// Generated message map functions +protected: + //{{AFX_MSG(CMainFrame) + afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); + // NOTE - the ClassWizard will add and remove member functions here. + // DO NOT EDIT what you see in these blocks of generated code! + //}}AFX_MSG + DECLARE_MESSAGE_MAP() + +public: + +static CMainFrame* g_pMainFrame; + +}; + +#define MainFrame ( CMainFrame::g_pMainFrame ? CMainFrame::g_pMainFrame : (CMainFrame*) AfxGetMainWnd() -> GetTopLevelFrame() ) + +///////////////////////////////////////////////////////////////////////////// + +//{{AFX_INSERT_LOCATION}} +// Microsoft Developer Studio will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_MAINFRM_H__826CB2EE_8B6D_11D1_AEC1_00600806E071__INCLUDED_) diff --git a/VC++Files/mysqlmanager/MySqlManager.mak b/VC++Files/mysqlmanager/MySqlManager.mak new file mode 100644 index 00000000000..b372daa52f2 --- /dev/null +++ b/VC++Files/mysqlmanager/MySqlManager.mak @@ -0,0 +1,327 @@ +# Microsoft Developer Studio Generated NMAKE File, Based on MySqlManager.dsp
+!IF "$(CFG)" == ""
+CFG=MySqlManager - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to MySqlManager - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "MySqlManager - Win32 Release" && "$(CFG)" != "MySqlManager - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "MySqlManager.mak" CFG="MySqlManager - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "MySqlManager - Win32 Release" (based on "Win32 (x86) Application")
+!MESSAGE "MySqlManager - Win32 Debug" (based on "Win32 (x86) Application")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "MySqlManager - Win32 Release"
+
+OUTDIR=.\release
+INTDIR=.\release
+# Begin Custom Macros
+OutDir=.\release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "..\client_release\MySqlManager.exe" "$(OUTDIR)\MySqlManager.pch"
+
+!ELSE
+
+ALL : "mysqlclient - Win32 Release" "..\client_release\MySqlManager.exe" "$(OUTDIR)\MySqlManager.pch"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"mysqlclient - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\ChildFrm.obj"
+ -@erase "$(INTDIR)\MainFrm.obj"
+ -@erase "$(INTDIR)\MySqlManager.obj"
+ -@erase "$(INTDIR)\MySqlManager.pch"
+ -@erase "$(INTDIR)\MySqlManager.res"
+ -@erase "$(INTDIR)\MySqlManagerDoc.obj"
+ -@erase "$(INTDIR)\MySqlManagerView.obj"
+ -@erase "$(INTDIR)\RegisterServer.obj"
+ -@erase "$(INTDIR)\StdAfx.obj"
+ -@erase "$(INTDIR)\ToolSql.obj"
+ -@erase "$(INTDIR)\ToolSqlQuery.obj"
+ -@erase "$(INTDIR)\ToolSqlResults.obj"
+ -@erase "$(INTDIR)\ToolSqlStatus.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "..\client_release\MySqlManager.exe"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /G6 /MT /W3 /GX /O1 /I "../include" /D "NDEBUG" /D "DBUG_OFF" /D "_WINDOWS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\MySqlManager.res" /d "NDEBUG" /d "_AFXDLL"
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\MySqlManager.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=/nologo /subsystem:windows /incremental:no /pdb:"$(OUTDIR)\MySqlManager.pdb" /machine:I386 /out:"../client_release/MySqlManager.exe"
+LINK32_OBJS= \
+ "$(INTDIR)\ChildFrm.obj" \
+ "$(INTDIR)\MainFrm.obj" \
+ "$(INTDIR)\MySqlManager.obj" \
+ "$(INTDIR)\MySqlManagerDoc.obj" \
+ "$(INTDIR)\MySqlManagerView.obj" \
+ "$(INTDIR)\RegisterServer.obj" \
+ "$(INTDIR)\StdAfx.obj" \
+ "$(INTDIR)\ToolSql.obj" \
+ "$(INTDIR)\ToolSqlQuery.obj" \
+ "$(INTDIR)\ToolSqlResults.obj" \
+ "$(INTDIR)\ToolSqlStatus.obj" \
+ "$(INTDIR)\MySqlManager.res" \
+ "..\lib_release\mysqlclient.lib"
+
+"..\client_release\MySqlManager.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "MySqlManager - Win32 Debug"
+
+OUTDIR=.\debug
+INTDIR=.\debug
+# Begin Custom Macros
+OutDir=.\debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "..\client_debug\MySqlManager.exe" "$(OUTDIR)\MySqlManager.pch"
+
+!ELSE
+
+ALL : "mysqlclient - Win32 Debug" "..\client_debug\MySqlManager.exe" "$(OUTDIR)\MySqlManager.pch"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"mysqlclient - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\ChildFrm.obj"
+ -@erase "$(INTDIR)\MainFrm.obj"
+ -@erase "$(INTDIR)\MySqlManager.obj"
+ -@erase "$(INTDIR)\MySqlManager.pch"
+ -@erase "$(INTDIR)\MySqlManager.res"
+ -@erase "$(INTDIR)\MySqlManagerDoc.obj"
+ -@erase "$(INTDIR)\MySqlManagerView.obj"
+ -@erase "$(INTDIR)\RegisterServer.obj"
+ -@erase "$(INTDIR)\StdAfx.obj"
+ -@erase "$(INTDIR)\ToolSql.obj"
+ -@erase "$(INTDIR)\ToolSqlQuery.obj"
+ -@erase "$(INTDIR)\ToolSqlResults.obj"
+ -@erase "$(INTDIR)\ToolSqlStatus.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\MySqlManager.pdb"
+ -@erase "..\client_debug\MySqlManager.exe"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /G6 /MTd /W3 /Gm /GX /ZI /Od /I "../include" /D "_DEBUG" /D "_WINDOWS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+MTL_PROJ=/nologo /D "_DEBUG" /o "NUL" /win32
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\MySqlManager.res" /d "_DEBUG"
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\MySqlManager.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /incremental:no /pdb:"$(OUTDIR)\MySqlManager.pdb" /debug /machine:I386 /out:"../client_debug/MySqlManager.exe" /pdbtype:sept /libpath:"..\lib_debug\\"
+LINK32_OBJS= \
+ "$(INTDIR)\ChildFrm.obj" \
+ "$(INTDIR)\MainFrm.obj" \
+ "$(INTDIR)\MySqlManager.obj" \
+ "$(INTDIR)\MySqlManagerDoc.obj" \
+ "$(INTDIR)\MySqlManagerView.obj" \
+ "$(INTDIR)\RegisterServer.obj" \
+ "$(INTDIR)\StdAfx.obj" \
+ "$(INTDIR)\ToolSql.obj" \
+ "$(INTDIR)\ToolSqlQuery.obj" \
+ "$(INTDIR)\ToolSqlResults.obj" \
+ "$(INTDIR)\ToolSqlStatus.obj" \
+ "$(INTDIR)\MySqlManager.res" \
+ "..\lib_debug\mysqlclient.lib"
+
+"..\client_debug\MySqlManager.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("MySqlManager.dep")
+!INCLUDE "MySqlManager.dep"
+!ELSE
+!MESSAGE Warning: cannot find "MySqlManager.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "MySqlManager - Win32 Release" || "$(CFG)" == "MySqlManager - Win32 Debug"
+SOURCE=.\ChildFrm.cpp
+
+"$(INTDIR)\ChildFrm.obj" : $(SOURCE) "$(INTDIR)"
+
+
+SOURCE=.\MainFrm.cpp
+
+"$(INTDIR)\MainFrm.obj" : $(SOURCE) "$(INTDIR)"
+
+
+SOURCE=.\MySqlManager.cpp
+
+"$(INTDIR)\MySqlManager.obj" : $(SOURCE) "$(INTDIR)"
+
+
+SOURCE=.\MySqlManager.rc
+
+"$(INTDIR)\MySqlManager.res" : $(SOURCE) "$(INTDIR)"
+ $(RSC) $(RSC_PROJ) $(SOURCE)
+
+
+SOURCE=.\MySqlManagerDoc.cpp
+
+"$(INTDIR)\MySqlManagerDoc.obj" : $(SOURCE) "$(INTDIR)"
+
+
+SOURCE=.\MySqlManagerView.cpp
+
+"$(INTDIR)\MySqlManagerView.obj" : $(SOURCE) "$(INTDIR)"
+
+
+SOURCE=.\RegisterServer.cpp
+
+"$(INTDIR)\RegisterServer.obj" : $(SOURCE) "$(INTDIR)"
+
+
+SOURCE=.\StdAfx.cpp
+
+!IF "$(CFG)" == "MySqlManager - Win32 Release"
+
+CPP_SWITCHES=/nologo /G6 /MT /W3 /GX /O1 /I "../include" /D "NDEBUG" /D "DBUG_OFF" /D "_WINDOWS" /Fp"$(INTDIR)\MySqlManager.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\StdAfx.obj" "$(INTDIR)\MySqlManager.pch" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "MySqlManager - Win32 Debug"
+
+CPP_SWITCHES=/nologo /G6 /MTd /W3 /Gm /GX /ZI /Od /I "../include" /D "_DEBUG" /D "_WINDOWS" /Fp"$(INTDIR)\MySqlManager.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\StdAfx.obj" "$(INTDIR)\MySqlManager.pch" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=.\ToolSql.cpp
+
+"$(INTDIR)\ToolSql.obj" : $(SOURCE) "$(INTDIR)"
+
+
+SOURCE=.\ToolSqlQuery.cpp
+
+"$(INTDIR)\ToolSqlQuery.obj" : $(SOURCE) "$(INTDIR)"
+
+
+SOURCE=.\ToolSqlResults.cpp
+
+"$(INTDIR)\ToolSqlResults.obj" : $(SOURCE) "$(INTDIR)"
+
+
+SOURCE=.\ToolSqlStatus.cpp
+
+"$(INTDIR)\ToolSqlStatus.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!IF "$(CFG)" == "MySqlManager - Win32 Release"
+
+"mysqlclient - Win32 Release" :
+ cd "\MYSQL-3.23\client"
+ $(MAKE) /$(MAKEFLAGS) /F ".\mysqlclient.mak" CFG="mysqlclient - Win32 Release"
+ cd "..\mysqlmanager"
+
+"mysqlclient - Win32 ReleaseCLEAN" :
+ cd "\MYSQL-3.23\client"
+ $(MAKE) /$(MAKEFLAGS) /F ".\mysqlclient.mak" CFG="mysqlclient - Win32 Release" RECURSE=1 CLEAN
+ cd "..\mysqlmanager"
+
+!ELSEIF "$(CFG)" == "MySqlManager - Win32 Debug"
+
+"mysqlclient - Win32 Debug" :
+ cd "\MYSQL-3.23\client"
+ $(MAKE) /$(MAKEFLAGS) /F ".\mysqlclient.mak" CFG="mysqlclient - Win32 Debug"
+ cd "..\mysqlmanager"
+
+"mysqlclient - Win32 DebugCLEAN" :
+ cd "\MYSQL-3.23\client"
+ $(MAKE) /$(MAKEFLAGS) /F ".\mysqlclient.mak" CFG="mysqlclient - Win32 Debug" RECURSE=1 CLEAN
+ cd "..\mysqlmanager"
+
+!ENDIF
+
+
+!ENDIF
+
diff --git a/VC++Files/mysqlmanager/README.TXT b/VC++Files/mysqlmanager/README.TXT new file mode 100644 index 00000000000..cdd54c2cba8 --- /dev/null +++ b/VC++Files/mysqlmanager/README.TXT @@ -0,0 +1,102 @@ +======================================================================== + MICROSOFT FOUNDATION CLASS LIBRARY : MySqlManager +======================================================================== + + +AppWizard has created this MySqlManager application for you. This application +not only demonstrates the basics of using the Microsoft Foundation classes +but is also a starting point for writing your application. + +This file contains a summary of what you will find in each of the files that +make up your MySqlManager application. + +MySqlManager.h + This is the main header file for the application. It includes other + project specific headers (including Resource.h) and declares the + CMySqlManagerApp application class. + +MySqlManager.cpp + This is the main application source file that contains the application + class CMySqlManagerApp. + +MySqlManager.rc + This is a listing of all of the Microsoft Windows resources that the + program uses. It includes the icons, bitmaps, and cursors that are stored + in the RES subdirectory. This file can be directly edited in Microsoft + Developer Studio. + +res\MySqlManager.ico + This is an icon file, which is used as the application's icon. This + icon is included by the main resource file MySqlManager.rc. + +res\MySqlManager.rc2 + This file contains resources that are not edited by Microsoft + Developer Studio. You should place all resources not + editable by the resource editor in this file. + +MySqlManager.clw + This file contains information used by ClassWizard to edit existing + classes or add new classes. ClassWizard also uses this file to store + information needed to create and edit message maps and dialog data + maps and to create prototype member functions. + +///////////////////////////////////////////////////////////////////////////// + +For the main frame window: + +MainFrm.h, MainFrm.cpp + These files contain the frame class CMainFrame, which is derived from + CMDIFrameWnd and controls all MDI frame features. + +res\Toolbar.bmp + This bitmap file is used to create tiled images for the toolbar. + The initial toolbar and status bar are constructed in the + CMainFrame class. Edit this toolbar bitmap along with the + array in MainFrm.cpp to add more toolbar buttons. + +///////////////////////////////////////////////////////////////////////////// + +AppWizard creates one document type and one view: + +MySqlManagerDoc.h, MySqlManagerDoc.cpp - the document + These files contain your CMySqlManagerDoc class. Edit these files to + add your special document data and to implement file saving and loading + (via CMySqlManagerDoc::Serialize). + +MySqlManagerView.h, MySqlManagerView.cpp - the view of the document + These files contain your CMySqlManagerView class. + CMySqlManagerView objects are used to view CMySqlManagerDoc objects. + +res\MySqlManagerDoc.ico + This is an icon file, which is used as the icon for MDI child windows + for the CMySqlManagerDoc class. This icon is included by the main + resource file MySqlManager.rc. + + +///////////////////////////////////////////////////////////////////////////// +Other standard files: + +StdAfx.h, StdAfx.cpp + These files are used to build a precompiled header (PCH) file + named MySqlManager.pch and a precompiled types file named StdAfx.obj. + +Resource.h + This is the standard header file, which defines new resource IDs. + Microsoft Developer Studio reads and updates this file. + +///////////////////////////////////////////////////////////////////////////// +Other notes: + +AppWizard uses "TODO:" to indicate parts of the source code you +should add to or customize. + +If your application uses MFC in a shared DLL, and your application is +in a language other than the operating system's current language, you +will need to copy the corresponding localized resources MFC40XXX.DLL +from the Microsoft Visual C++ CD-ROM onto the system or system32 directory, +and rename it to be MFCLOC.DLL. ("XXX" stands for the language abbreviation. +For example, MFC40DEU.DLL contains resources translated to German.) If you +don't do this, some of the UI elements of your application will remain in the +language of the operating system. + +///////////////////////////////////////////////////////////////////////////// diff --git a/VC++Files/mysqlmanager/RES/BITMAP1.BMP b/VC++Files/mysqlmanager/RES/BITMAP1.BMP Binary files differnew file mode 100644 index 00000000000..3751f1a6923 --- /dev/null +++ b/VC++Files/mysqlmanager/RES/BITMAP1.BMP diff --git a/VC++Files/mysqlmanager/RES/BITMAP3.BMP b/VC++Files/mysqlmanager/RES/BITMAP3.BMP Binary files differnew file mode 100644 index 00000000000..3751f1a6923 --- /dev/null +++ b/VC++Files/mysqlmanager/RES/BITMAP3.BMP diff --git a/VC++Files/mysqlmanager/RES/BMP00001.BMP b/VC++Files/mysqlmanager/RES/BMP00001.BMP Binary files differnew file mode 100644 index 00000000000..e98e93d7850 --- /dev/null +++ b/VC++Files/mysqlmanager/RES/BMP00001.BMP diff --git a/VC++Files/mysqlmanager/RES/BMP00002.BMP b/VC++Files/mysqlmanager/RES/BMP00002.BMP Binary files differnew file mode 100644 index 00000000000..2f2c195a683 --- /dev/null +++ b/VC++Files/mysqlmanager/RES/BMP00002.BMP diff --git a/VC++Files/mysqlmanager/RES/DATABASE.BMP b/VC++Files/mysqlmanager/RES/DATABASE.BMP Binary files differnew file mode 100644 index 00000000000..2fc41313541 --- /dev/null +++ b/VC++Files/mysqlmanager/RES/DATABASE.BMP diff --git a/VC++Files/mysqlmanager/RES/FONTD.BMP b/VC++Files/mysqlmanager/RES/FONTD.BMP Binary files differnew file mode 100644 index 00000000000..c77b4f4fdd0 --- /dev/null +++ b/VC++Files/mysqlmanager/RES/FONTD.BMP diff --git a/VC++Files/mysqlmanager/RES/FONTU.BMP b/VC++Files/mysqlmanager/RES/FONTU.BMP Binary files differnew file mode 100644 index 00000000000..c77b4f4fdd0 --- /dev/null +++ b/VC++Files/mysqlmanager/RES/FONTU.BMP diff --git a/VC++Files/mysqlmanager/RES/QUERY_EX.BMP b/VC++Files/mysqlmanager/RES/QUERY_EX.BMP Binary files differnew file mode 100644 index 00000000000..cc77222decc --- /dev/null +++ b/VC++Files/mysqlmanager/RES/QUERY_EX.BMP diff --git a/VC++Files/mysqlmanager/RES/TOOLBAR.BMP b/VC++Files/mysqlmanager/RES/TOOLBAR.BMP Binary files differnew file mode 100644 index 00000000000..d501723c1ce --- /dev/null +++ b/VC++Files/mysqlmanager/RES/TOOLBAR.BMP diff --git a/VC++Files/mysqlmanager/RES/mysqlmanager.ico b/VC++Files/mysqlmanager/RES/mysqlmanager.ico Binary files differnew file mode 100644 index 00000000000..7eef0bcbe65 --- /dev/null +++ b/VC++Files/mysqlmanager/RES/mysqlmanager.ico diff --git a/VC++Files/mysqlmanager/RES/mysqlmanager.rc2 b/VC++Files/mysqlmanager/RES/mysqlmanager.rc2 new file mode 100644 index 00000000000..67d4f3f4a85 --- /dev/null +++ b/VC++Files/mysqlmanager/RES/mysqlmanager.rc2 @@ -0,0 +1,13 @@ +//
+// MYSQLMANAGER.RC2 - resources Microsoft Visual C++ does not edit directly
+//
+
+#ifdef APSTUDIO_INVOKED
+ #error this file is not editable by Microsoft Visual C++
+#endif //APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+// Add manually edited resources here...
+
+/////////////////////////////////////////////////////////////////////////////
diff --git a/VC++Files/mysqlmanager/RES/mysqlmanagerdoc.ico b/VC++Files/mysqlmanager/RES/mysqlmanagerdoc.ico Binary files differnew file mode 100644 index 00000000000..2a1f1ae6ef1 --- /dev/null +++ b/VC++Files/mysqlmanager/RES/mysqlmanagerdoc.ico diff --git a/VC++Files/mysqlmanager/RESOURCE.H b/VC++Files/mysqlmanager/RESOURCE.H new file mode 100644 index 00000000000..def26ce6808 --- /dev/null +++ b/VC++Files/mysqlmanager/RESOURCE.H @@ -0,0 +1,55 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by MySqlManager.rc +// +#define IDC_START_PB 3 +#define IDC_STOP_PB 4 +#define ID_SERVERS_PB 7 +#define IDD_ABOUTBOX 100 +#define IDM_QUERY_EXEC 101 +#define IDM_QUERY_DATABASES 102 +#define IDM_REFRESH 103 +#define IDD_REGISTER_SERVER 114 +#define IDR_MAINFRAME 128 +#define IDR_MYSQLMTYPE 129 +#define IDD_TOOL_SQL 132 +#define IDB_BITMAP1 133 +#define IDD_TOOL_SQL_QUERY 134 +#define IDD_TOOL_SQL_RESULTS 135 +#define IDD_TOOL_SQL_STATUS 136 +#define IDC_TAB1 1000 +#define IDC_EDIT 1001 +#define IDC_QUERY_PB 1002 +#define IDC_FONT_PB 1003 +#define IDS_QUERY_EXEC 1003 +#define ID_SERVER_CB 1003 +#define ID_USER 1004 +#define IDC_SERVER_CB 1004 +#define IDC_DATABASES_PB 1005 +#define ID_PASSWORD 1005 +#define ID_HOST_CB 1006 +#define IDC_TIMER_SECS 1006 +#define ID_PORT_CB 1007 +#define IDC_CLEAR 1007 +#define ID_GROUPS_PB 1012 +#define ID_REMOVE_PB 1017 +#define ID_DISPLAY_SERVER_STATUS_CK 1057 +#define ID_USE_STANDARD_CK 1058 +#define ID_USE_TRUSTED_CK 1059 +#define IDM_SQL_TOOL_QUERY 32771 +#define IDM_TOOLS_REGISTER_SERVER 32772 +#define IDM_TOOLS_SERVER_PROPERTIES 32773 +#define IDS_QUERY_DATABASES 57346 +#define IDS_REFRESH 57347 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_3D_CONTROLS 1 +#define _APS_NEXT_RESOURCE_VALUE 136 +#define _APS_NEXT_COMMAND_VALUE 32775 +#define _APS_NEXT_CONTROL_VALUE 1008 +#define _APS_NEXT_SYMED_VALUE 104 +#endif +#endif diff --git a/VC++Files/mysqlmanager/STDAFX.CPP b/VC++Files/mysqlmanager/STDAFX.CPP new file mode 100644 index 00000000000..3e0251dff43 --- /dev/null +++ b/VC++Files/mysqlmanager/STDAFX.CPP @@ -0,0 +1,5 @@ +// stdafx.cpp : source file that includes just the standard includes +// MySqlManager.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" diff --git a/VC++Files/mysqlmanager/STDAFX.H b/VC++Files/mysqlmanager/STDAFX.H new file mode 100644 index 00000000000..8cd7dfd04f3 --- /dev/null +++ b/VC++Files/mysqlmanager/STDAFX.H @@ -0,0 +1,28 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#if !defined(AFX_STDAFX_H__826CB2EC_8B6D_11D1_AEC1_00600806E071__INCLUDED_) +#define AFX_STDAFX_H__826CB2EC_8B6D_11D1_AEC1_00600806E071__INCLUDED_ + +#if _MSC_VER >= 1000 +#pragma once +#endif // _MSC_VER >= 1000 + +#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers + +#include <afxwin.h> // MFC core and standard components +#include <afxext.h> // MFC extensions +#include <afxdisp.h> // MFC OLE automation classes +#ifndef _AFX_NO_AFXCMN_SUPPORT +#include <afxcmn.h> // MFC support for Windows Common Controls +#endif // _AFX_NO_AFXCMN_SUPPORT + +#include <afxsock.h> +#include "mysql.h" + +//{{AFX_INSERT_LOCATION}} +// Microsoft Developer Studio will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_STDAFX_H__826CB2EC_8B6D_11D1_AEC1_00600806E071__INCLUDED_) diff --git a/VC++Files/mysqlmanager/TOOLSQL.CPP b/VC++Files/mysqlmanager/TOOLSQL.CPP new file mode 100644 index 00000000000..1773a3a6dc7 --- /dev/null +++ b/VC++Files/mysqlmanager/TOOLSQL.CPP @@ -0,0 +1,687 @@ +// ToolSql.cpp : implementation file +// + +#include "stdafx.h" +#include "MySqlManager.h" +#include "ToolSql.h" + +#define WINDOW_COORDS 0 +#define CLIENT_COORDS 1 + +#define MY_TIMER_ID 0x1234 + +#ifdef _DEBUG + #define new DEBUG_NEW + #undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +///////////////////////////////////////////////////////////////////////////// + +CToolSql::CToolSql(CWnd* pParent,CResource* pServer,CResource* pResource) +: CDialog(CToolSql::IDD, pParent) +, m_pQuery(0) +, m_pResults(0) +, m_pStatus(0) +, m_pServer(pServer) +, m_pResource(pResource) +, m_ui_timer(0) +{ + //{{AFX_DATA_INIT(CToolSql) + m_nIntervalTimerSeconds = 10; + m_bClear = FALSE; + //}}AFX_DATA_INIT + memset ( & m_lf, 0,sizeof(m_lf) ); +} + +///////////////////////////////////////////////////////////////////////////// + +CToolSql::~CToolSql() +{ + + if (m_ui_timer) + { + KillTimer(MY_TIMER_ID); + } + + if (m_pdb) + { + mysql_close(m_pdb); + } + if (m_pQuery) + { + m_pQuery->DestroyWindow(); + delete m_pQuery; + } + if (m_pResults) + { + m_pResults->DestroyWindow(); + delete m_pResults; + } + if (m_pStatus) + { + m_pStatus->DestroyWindow(); + delete m_pStatus; + } +} + +///////////////////////////////////////////////////////////////////////////// + +void CToolSql::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); + //{{AFX_DATA_MAP(CToolSql) + DDX_Control(pDX, IDC_STOP_PB, m_ctl_Stop); + DDX_Control(pDX, IDC_START_PB, m_ctl_Start); + DDX_Control(pDX, IDC_SERVER_CB, m_ctl_Server); + DDX_Control(pDX, IDC_TAB1, m_tabs); + DDX_Text(pDX, IDC_TIMER_SECS, m_nIntervalTimerSeconds); + DDV_MinMaxInt(pDX, m_nIntervalTimerSeconds, 1, 120); + DDX_Check(pDX, IDC_CLEAR, m_bClear); + //}}AFX_DATA_MAP +} + + +BEGIN_MESSAGE_MAP(CToolSql, CDialog) +//{{AFX_MSG_MAP(CToolSql) + ON_BN_CLICKED(IDC_QUERY_PB, OnQueryPb) + ON_BN_CLICKED(IDC_DATABASES_PB, OnQueryDatabases) + ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, OnSelchangeTab1) + ON_BN_CLICKED(IDC_FONT_PB, OnFontPb) + ON_WM_SIZE() + ON_BN_CLICKED(IDC_START_PB, OnStartPb) + ON_BN_CLICKED(IDC_STOP_PB, OnStopPb) + ON_WM_TIMER() + ON_WM_DESTROY() + ON_BN_CLICKED(IDC_CLEAR, OnClear) + ON_COMMAND(IDM_QUERY_EXEC, OnQueryPb) + ON_COMMAND(IDM_QUERY_DATABASES, OnQueryDatabases) + ON_EN_CHANGE(IDC_TIMER_SECS, OnChangeTimerSecs) + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// + +BOOL CToolSql::OnInitDialog() +{ + + CDialog::OnInitDialog(); + + m_ctl_Start . EnableWindow(TRUE); + m_ctl_Stop . EnableWindow(FALSE); + + CString strTitle; + + strTitle.Format ("mySql Query to %s on %s",m_pServer->GetDisplayName(),m_pServer->GetHostName()); + + m_ctl_Server.AddString ( m_pServer->GetDisplayName() ); + m_ctl_Server.SetCurSel (0); + + SetWindowText(strTitle); + + CWaitCursor x; + + m_btn_QueryExec.AutoLoad ( IDC_QUERY_PB, this ); + m_btn_QueryDatabases.AutoLoad ( IDC_DATABASES_PB, this ); + m_btn_Font.AutoLoad ( IDC_FONT_PB, this ); + + m_tabs.GetWindowRect ( m_rectTab[WINDOW_COORDS] ); + GetWindowRect ( m_rectDlg[WINDOW_COORDS] ); + + m_tabs.GetClientRect ( m_rectTab[CLIENT_COORDS] ); + GetClientRect ( m_rectDlg[CLIENT_COORDS] ); + + CMenu* pSysMenu = GetSystemMenu(FALSE); + if (pSysMenu != NULL) + { + CString strText; + strText.LoadString(IDS_QUERY_EXEC); + if (!strText.IsEmpty()) + { + pSysMenu->AppendMenu(MF_SEPARATOR); + pSysMenu->AppendMenu(MF_STRING, IDM_QUERY_EXEC, strText); + } + strText.LoadString(IDS_QUERY_DATABASES); + if (!strText.IsEmpty()) + { + pSysMenu->AppendMenu(MF_STRING, IDM_QUERY_DATABASES, strText); + } + } + + + m_pdb = new MYSQL; + + CString strQuery ( "Query" ); + CString strResults ( "Results" ); + CString strStatus ( "Status" ); + + TC_ITEM tc1 = { TCIF_TEXT, 0,0, (LPSTR)(LPCTSTR)strQuery, strQuery.GetLength(), 0,0}; + TC_ITEM tc2 = { TCIF_TEXT, 0,0, (LPSTR)(LPCTSTR)strResults, strResults.GetLength(), 0,0}; + TC_ITEM tc3 = { TCIF_TEXT, 0,0, (LPSTR)(LPCTSTR)strStatus, strStatus.GetLength(), 0,0}; + + m_tabs.InsertItem ( 0,&tc1 ); + m_tabs.InsertItem ( 1,&tc2 ); + m_tabs.InsertItem ( 2,&tc3 ); + + m_pQuery = new CToolSqlQuery ( NULL ); + m_pResults = new CToolSqlResults ( NULL ); + m_pStatus = new CToolSqlStatus ( NULL ); + + try + { + +// OpenDatabase(); +// +// m_pSelection->SetDatabase ( & m_db ); +// m_pScript->SetDatabase ( & m_db ); +// m_pLog->SetDatabase ( & m_db ); + + m_pQuery -> Create ( (LPCTSTR)IDD_TOOL_SQL_QUERY, &m_tabs ); + m_pResults -> Create ( (LPCTSTR)IDD_TOOL_SQL_RESULTS, &m_tabs ); + m_pStatus -> Create ( (LPCTSTR)IDD_TOOL_SQL_STATUS, &m_tabs ); + + ActivateTab ( 0 ); + + m_pQuery -> SetWindowPos(NULL,20,24,0,0,SWP_NOZORDER|SWP_NOSIZE); + m_pResults -> SetWindowPos(NULL,20,24,0,0,SWP_NOZORDER|SWP_NOSIZE); + m_pStatus -> SetWindowPos(NULL,20,24,0,0,SWP_NOZORDER|SWP_NOSIZE); + + DoOnSize( SIZE_RESTORED, m_rectDlg[CLIENT_COORDS].Width(), m_rectDlg[CLIENT_COORDS].Height() ); + + } + catch (...) + { + } + + mysql_init(m_pdb); + if (!mysql_real_connect(m_pdb,m_pServer->GetHostName(), m_pServer->GetUserName(),m_pServer->GetPassword(),0,m_pServer->GetPortNumber(), NullS,0)) + { +// my_printf_error(0,"connect to server at '%s' failed; error: '%s'", +// MYF(ME_BELL), pResource->GetHostName(), mysql_error(&mysql)); + CString strText; + strText.Format ( "connect to server at '%s' failed; error: '%s'", m_pServer->GetHostName(), mysql_error(m_pdb)); + AfxMessageBox(strText); + EndDialog(IDCANCEL); + return FALSE; + } + + if ( m_pResource && m_pResource->GetType() == CResource::eDatabase ) + { + CString strDB = m_pResource->GetDisplayName(); + strDB.TrimRight(); + if (mysql_select_db(m_pdb,strDB)) + { + } + } + + return FALSE; // return TRUE unless you set the focus to a control + // EXCEPTION: OCX Property Pages should return FALSE +} + +///////////////////////////////////////////////////////////////////////////// + +void CToolSql::ActivateTab ( int tab ) + +{ + switch (tab) + { + case 0: ; + m_pResults-> ShowWindow(SW_HIDE); + m_pStatus-> ShowWindow(SW_HIDE); + m_pQuery-> ShowWindow(SW_SHOW); + m_pQuery->m_ctl_edit.SetFocus(); + break; + case 1: ; + m_pQuery-> ShowWindow(SW_HIDE); + m_pStatus-> ShowWindow(SW_HIDE); + m_pResults-> ShowWindow(SW_SHOW); + m_pResults->m_ctl_edit.SetFocus(); + break; + case 2: ; + m_pResults-> ShowWindow(SW_HIDE); + m_pQuery-> ShowWindow(SW_HIDE); + m_pStatus-> ShowWindow(SW_SHOW); + m_pStatus->m_ctl_edit.SetFocus(); + break; + default: + break; + } + +} + +///////////////////////////////////////////////////////////////////////////// + +void CalculateFontSize ( CEdit& ed, CSize& sizeRet ) + +{ + + CDC* pdc = ed.GetDC(); + + int nAveWidth , nAveHeight; + int i ; + + CSize size ; + + static BOOL bFirstTime = TRUE; + static char rgchAlphabet [54] ; + + if ( bFirstTime ) + { + bFirstTime = false; + for ( i = 0 ; i <= 25 ; i++) + { + rgchAlphabet[i] = (char)(i+(int)'a') ; + rgchAlphabet[i+26] = (char)(i+(int)'A') ; + } + rgchAlphabet[52] = 0x20; + rgchAlphabet[53] = 0x20; + } + + CFont* pf = ed.GetFont(); + LOGFONT lf; + pf->GetLogFont(&lf); + pdc->SelectObject (pf); + GetTextExtentPoint32 ( pdc->m_hDC, (LPSTR) rgchAlphabet, 54, & size ) ; + + nAveWidth = size.cx / 54 ; + + if ( size.cx % 54 ) + { + nAveWidth++; + } + + nAveHeight = size.cy; //6 * size.cy / 4; + + sizeRet.cx = nAveWidth; + sizeRet.cy = nAveHeight; // tm.tmHeight; + + ed.ReleaseDC(pdc); + +} + +/////////////////////////////////////////////////////////////////////////////// +int ProcessYieldMessage () +{ + + CWinApp* pApp = AfxGetApp(); + + if ( pApp ) + { + MSG msgx; + while (::PeekMessage(&msgx, NULL, NULL, NULL, PM_NOREMOVE)) + try + { + if (!pApp->PumpMessage()) + { +// ExitProcess(1); + } + } + catch (...) + { + } + } + + return 0; + +} + + +///////////////////////////////////////////////////////////////////////////// + +void print_table_data(MYSQL_RES *result,CString& str,CEdit& ed,LOGFONT& lf) +{ + MYSQL_ROW cur; + uint length; + MYSQL_FIELD* field; + bool* num_flag; + my_ulonglong nRows = mysql_num_rows(result); + uint nFields = mysql_num_fields(result); + int* rgi = new int [nFields]; + memset ( rgi, 0, nFields*sizeof(int) ); + num_flag=(bool*) my_alloca(sizeof(bool)*nFields); + + ed.SetLimitText(65535*16); + + CSize sizeFont; + CalculateFontSize ( ed, sizeFont ); + uint index = 0; + rgi[index++]=0; + CString separator(""); + + mysql_field_seek(result,0); + + for (uint off=0; (field = mysql_fetch_field(result)) ; off++) + { + uint length= (uint) strlen(field->name); + length=max(length,field->max_length); + if (length < 4 && !IS_NOT_NULL(field->flags)) + length=4; // Room for "NULL" + field->max_length=length+1; + int n=length+2; + for (uint i=lstrlen(field->name); i-- > 0 ; ) separator+="-"; + if ( index!= nFields ) + { + int o = rgi[index-1]; + rgi[index++]=o+((n+1)*sizeFont.cx)/2; + } + separator+='\t'; + str += field->name; + str += "\t"; + num_flag[off]= IS_NUM(field->type); + } + separator += "\r\n"; + str += "\r\n"; + str += separator; + ed.SetSel(-1,-1); + ed.ReplaceSel(str); + + if ( 1 || nRows > 100 ) + { + while ((cur = mysql_fetch_row(result))) + { + ProcessYieldMessage (); + mysql_field_seek(result,0); + str.Empty(); + ed.SetSel(-1,-1); + for (uint off=0 ; off < mysql_num_fields(result); off++) + { + field = mysql_fetch_field(result); + length=field->max_length; + CString strText; + strText.Format ("%s", cur[off] ? (char*) cur[off] : "NULL"); + str += strText; + str += "\t"; + } + str += "\r\n"; + ed.SetSel(-1,-1); + ed.ReplaceSel(str); + } + } + else + { + while ((cur = mysql_fetch_row(result))) + { + mysql_field_seek(result,0); + for (uint off=0 ; off < mysql_num_fields(result); off++) + { + field = mysql_fetch_field(result); + length=field->max_length; + CString strText; + strText.Format ("%s", cur[off] ? (char*) cur[off] : "NULL"); + str += strText; + str += "\t"; + } + str += "\r\n"; + } + } + my_afree((gptr) num_flag); + str += "\r\n"; + ed.SetTabStops(nFields,rgi); + delete [] rgi; +} + + + +///////////////////////////////////////////////////////////////////////////// + +void CToolSql::OnQueryPb() +{ + + CWaitCursor x; +// mysql_select_db(m_pdb,"mysql"); + + if ( m_pResource && m_pResource->GetType() == CResource::eDatabase ) + { + CString strDB = m_pResource->GetDisplayName(); + strDB.TrimRight(); + if (mysql_select_db(m_pdb,strDB)) + { + } + } + + m_pQuery->UpdateData(); + m_pResults->m_edit.Empty(); + CString str = m_pQuery->m_edit; + if ( mysql_real_query(m_pdb,str,str.GetLength())==0 ) + { + MYSQL_RES *result; + if ((result=mysql_store_result(m_pdb))) + { + my_ulonglong nRows = mysql_num_rows(result); + m_pResults->UpdateData(FALSE); + m_tabs.SetCurSel(1); + ActivateTab ( 1 ); + print_table_data(result,m_pResults->m_edit,m_pResults->m_ctl_edit,m_lf); +// m_pResults->UpdateData(FALSE); + m_pResults->m_ctl_edit.SetSel(-1,-1); + CString strText; + strText.Format ( "\r\n(%d row(s) affected)\r\n", nRows ); + m_pResults->m_ctl_edit.ReplaceSel(strText); + mysql_free_result(result); + } + else + { + m_pResults->m_edit = mysql_error(m_pdb); + m_pResults->UpdateData(FALSE); + } + } + else + { + m_pResults->m_edit = mysql_error(m_pdb); + m_pResults->UpdateData(FALSE); + } + + m_tabs.SetCurSel(1); + ActivateTab ( 1 ); + +} + +///////////////////////////////////////////////////////////////////////////// + +void CToolSql::OnQueryDatabases() +{ + CWaitCursor x; + MYSQL_RES *result; + m_pResults->m_edit.Empty(); + if ((result=mysql_list_dbs(m_pdb,0))) + { + my_ulonglong nRows = mysql_num_rows(result); + print_table_data(result,m_pResults->m_edit,m_pResults->m_ctl_edit,m_lf); + //m_pResults->UpdateData(FALSE); + mysql_free_result(result); + } + else + { + m_pResults->m_edit = mysql_error(m_pdb); + m_pResults->UpdateData(FALSE); + } + + m_tabs.SetCurSel(1); + ActivateTab ( 1 ); + +} + +///////////////////////////////////////////////////////////////////////////// + +void CToolSql::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult) +{ + ActivateTab ( m_tabs.GetCurSel() ); + *pResult = 0; +} + +///////////////////////////////////////////////////////////////////////////// + +void CToolSql::OnFontPb() +{ + + CFontDialog FontDlg ( & m_lf ); + + if ( FontDlg.DoModal ( ) == IDOK ) + { + if (m_font.GetSafeHandle()) + m_font.DeleteObject(); + m_lf = *FontDlg.m_cf.lpLogFont; + m_font.CreateFontIndirect(FontDlg.m_cf.lpLogFont); + m_pQuery->SetFont(&m_font); + m_pResults->SetFont(&m_font); + m_pStatus->SetFont(&m_font); + } + +} + +///////////////////////////////////////////////////////////////////////////// + +void CToolSql::DoOnSize(UINT nType, int cx, int cy) +{ + + int nx = cx - ( m_rectDlg[CLIENT_COORDS].Width ( ) - m_rectTab[CLIENT_COORDS].Width ( ) ); + int ny = cy - ( m_rectDlg[CLIENT_COORDS].Height ( ) - m_rectTab[CLIENT_COORDS].Height ( ) ); + + if (IsWindow(m_tabs.GetSafeHwnd())) + { + m_tabs.SetWindowPos ( NULL + , 0 + , 0 + , nx + , ny + , SWP_NOZORDER | SWP_NOMOVE | SWP_SHOWWINDOW ); + + if (m_pResults&&IsWindow(m_pResults->GetSafeHwnd())) + m_pResults -> SetWindowPos(NULL,20,24,nx-40,ny-48,SWP_NOZORDER | SWP_NOMOVE ); + if (m_pQuery&&IsWindow(m_pQuery->GetSafeHwnd())) + m_pQuery -> SetWindowPos(NULL,20,24,nx-40,ny-48,SWP_NOZORDER | SWP_NOMOVE ); + if (m_pStatus&&IsWindow(m_pStatus->GetSafeHwnd())) + m_pStatus -> SetWindowPos(NULL,20,24,nx-40,ny-48,SWP_NOZORDER | SWP_NOMOVE ); +// switch ( m_tabs.GetCurSel() ) +// { +// case 0: +// { +// if (m_pResults&&IsWindow(m_pResults->GetSafeHwnd())) +// m_pResults -> SetWindowPos(NULL,20,24,nx-40,ny-48,SWP_NOZORDER | SWP_NOMOVE | SWP_HIDEWINDOW ); +// if (m_pQuery&&IsWindow(m_pQuery->GetSafeHwnd())) +// m_pQuery -> SetWindowPos(NULL,20,24,nx-40,ny-48,SWP_NOZORDER | SWP_NOMOVE | SWP_SHOWWINDOW ); +// break; +// } +// case 1: +// { +// if (m_pQuery&&IsWindow(m_pQuery->GetSafeHwnd())) +// m_pQuery -> SetWindowPos(NULL,20,24,nx-40,ny-48,SWP_NOZORDER | SWP_NOMOVE | SWP_HIDEWINDOW ); +// if (m_pResults&&IsWindow(m_pResults->GetSafeHwnd())) +// m_pResults -> SetWindowPos(NULL,20,24,nx-40,ny-48,SWP_NOZORDER | SWP_NOMOVE | SWP_SHOWWINDOW ); +// break; +// } +// } + } + +} + +///////////////////////////////////////////////////////////////////////////// + +void CToolSql::OnSize(UINT nType, int cx, int cy) +{ + + CDialog::OnSize(nType, cx, cy); + + DoOnSize ( nType, cx, cy ); + +} + +///////////////////////////////////////////////////////////////////////////// + +void CToolSql::OnOK() +{ + CDialog::OnOK(); +} + +///////////////////////////////////////////////////////////////////////////// + +void CToolSql::OnCancel() +{ + CDialog::OnCancel(); +} + +///////////////////////////////////////////////////////////////////////////// + +BOOL CToolSql::PreTranslateMessage(MSG* pMsg) +{ + return CDialog::PreTranslateMessage(pMsg); +} + +///////////////////////////////////////////////////////////////////////////// + +void CToolSql::DoProcessListQuery() +{ + + MYSQL_RES *result; + if (result=mysql_list_processes(m_pdb)) + { + if (m_bClear) + { + m_pStatus->m_edit.Empty(); + m_pStatus->UpdateData(FALSE); + } + print_table_data(result,m_pStatus->m_edit,m_pStatus->m_ctl_edit,m_lf); + mysql_free_result(result); + } + else + { +// my_printf_error(0,"process list failed; error: '%s'",MYF(ME_BELL),mysql_error(mysql)); + } + +} + +///////////////////////////////////////////////////////////////////////////// + +void CToolSql::OnStartPb() +{ + UpdateData(); + if (m_ui_timer) return; + if (m_nIntervalTimerSeconds<1) return; + ActivateTab ( 2 ); + m_ui_timer = SetTimer( MY_TIMER_ID, m_nIntervalTimerSeconds*1000, NULL ); + m_ctl_Start . EnableWindow(FALSE); + m_ctl_Stop . EnableWindow(TRUE); + DoProcessListQuery(); +} + +///////////////////////////////////////////////////////////////////////////// + +void CToolSql::OnStopPb() +{ + UpdateData(); + if (m_ui_timer) + { + KillTimer(MY_TIMER_ID); + m_ui_timer = 0; + } + m_ctl_Start . EnableWindow(TRUE); + m_ctl_Stop . EnableWindow(FALSE); +} + +///////////////////////////////////////////////////////////////////////////// + +void CToolSql::OnTimer(UINT nIDEvent) +{ + DoProcessListQuery(); + CDialog::OnTimer(nIDEvent); +} + +void CToolSql::OnDestroy() +{ + if (m_ui_timer) + { + KillTimer(MY_TIMER_ID); + m_ui_timer = 0; + } + CDialog::OnDestroy(); +} + +void CToolSql::OnClear() +{ + UpdateData(); +} + +void CToolSql::OnChangeTimerSecs() +{ + UpdateData(); +} diff --git a/VC++Files/mysqlmanager/TOOLSQL.H b/VC++Files/mysqlmanager/TOOLSQL.H new file mode 100644 index 00000000000..7d608f46cd2 --- /dev/null +++ b/VC++Files/mysqlmanager/TOOLSQL.H @@ -0,0 +1,102 @@ +#if !defined(AFX_ToolSql_H__826CB2FC_8B6D_11D1_AEC1_00600806E071__INCLUDED_) +#define AFX_ToolSql_H__826CB2FC_8B6D_11D1_AEC1_00600806E071__INCLUDED_ + +#if _MSC_VER >= 1000 +#pragma once +#endif // _MSC_VER >= 1000 + +#include "ToolSqlQuery.h" +#include "ToolSqlResults.h" +#include "ToolSqlStatus.h" +#include "cresource.h" +#include <my_global.h> +#include "my_sys.h" +#include "mysql.h" + + +///////////////////////////////////////////////////////////////////////////// +// CToolSql dialog + +class CToolSql : public CDialog +{ +// Construction +public: + CToolSql(CWnd* pParent = NULL,CResource* pServer=NULL,CResource* pResource=NULL); + ~CToolSql(); + +// Dialog Data + //{{AFX_DATA(CToolSql) + enum { IDD = IDD_TOOL_SQL }; + CButton m_ctl_Stop; + CButton m_ctl_Start; + CComboBox m_ctl_Server; + CTabCtrl m_tabs; + int m_nIntervalTimerSeconds; + BOOL m_bClear; + //}}AFX_DATA + + CBitmapButton m_btn_QueryExec; + CBitmapButton m_btn_Font; + CBitmapButton m_btn_QueryDatabases; + +#ifdef _WIN64 + __int64 m_ui_timer; +#else + UINT m_ui_timer; +#endif + +// Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CToolSql) + public: + virtual BOOL PreTranslateMessage(MSG* pMsg); + protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + //}}AFX_VIRTUAL + +// Implementation + + void ActivateTab ( int tab ); + void DoProcessListQuery(); + + CToolSqlQuery* m_pQuery; + CToolSqlResults* m_pResults; + CToolSqlStatus* m_pStatus; + + CResource* m_pServer; + CResource* m_pResource; + MYSQL* m_pdb; + CFont m_font; + LOGFONT m_lf; + CRect m_rectTab[2]; + CRect m_rectDlg[2]; + +protected: + + // Generated message map functions + //{{AFX_MSG(CToolSql) + virtual BOOL OnInitDialog(); + afx_msg void OnQueryPb(); + afx_msg void OnQueryDatabases(); + afx_msg void OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult); + afx_msg void OnFontPb(); + afx_msg void OnSize(UINT nType, int cx, int cy); + virtual void OnOK(); + virtual void OnCancel(); + afx_msg void OnStartPb(); + afx_msg void OnStopPb(); + afx_msg void OnTimer(UINT nIDEvent); + afx_msg void OnDestroy(); + afx_msg void OnClear(); + afx_msg void OnChangeTimerSecs(); + //}}AFX_MSG + DECLARE_MESSAGE_MAP() + + void DoOnSize(UINT nType, int cx, int cy) ; + +}; + +//{{AFX_INSERT_LOCATION}} +// Microsoft Developer Studio will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_ToolSql_H__826CB2FC_8B6D_11D1_AEC1_00600806E071__INCLUDED_) diff --git a/VC++Files/mysqlmanager/cresource.h b/VC++Files/mysqlmanager/cresource.h new file mode 100644 index 00000000000..37c1839d758 --- /dev/null +++ b/VC++Files/mysqlmanager/cresource.h @@ -0,0 +1,134 @@ +#ifndef _CRESOURCE_H +#define _CRESOURCE_H + +///////////////////////////////////////////////////////////////////////////// + +#define MYSQL_PORT_AS_STRING "3306" /* Can't use # in preprocessor because of bugs in VC++ 5.0 */ + +class CResource +{ +public: + enum eRESOURCETYPE + { + eNone + , eServer + , eDatabase + , eTable + , eField + , eProcesslist + , eProcesslistItem + }; + virtual LPCTSTR GetDisplayName() { return ""; } + virtual LPCTSTR GetHostName() { return LOCAL_HOST; } + virtual LPCTSTR GetUserName() { return "root"; } + virtual LPCTSTR GetPassword() { return ""; } + virtual LPCTSTR GetPortName() { return MYSQL_PORT_AS_STRING; } + virtual int GetPortNumber() { return MYSQL_PORT; } + virtual eRESOURCETYPE GetType() { return eNone; } +}; + +///////////////////////////////////////////////////////////////////////////// + +class CResourceServer : public CResource +{ +public: + CResourceServer(LPCTSTR pszName = "",LPCTSTR pszHost = LOCAL_HOST ,LPCTSTR pszUser = "root", LPCTSTR pszPassword = "", LPCTSTR pszPort = MYSQL_PORT_AS_STRING) + : m_strName(pszName) + , m_strHost(pszHost) + , m_strUser(pszUser) + , m_strPassword(pszPassword) + , m_strPort(pszPort) + { + } + virtual LPCTSTR GetDisplayName() { return m_strName; } + virtual LPCTSTR GetHostName() { return m_strHost; } + virtual LPCTSTR GetUserName() { return m_strUser; } + virtual LPCTSTR GetPassword() { return m_strPassword; } + virtual eRESOURCETYPE GetType() { return eServer; } + virtual LPCTSTR GetPortName() { return m_strPort; } + virtual int GetPortNumber() { return atoi(m_strPort); } + CString m_strName; + CString m_strHost; + CString m_strUser; + CString m_strPassword; + CString m_strPort; + CStringArray m_rgFields; +}; + +///////////////////////////////////////////////////////////////////////////// + +class CResourceDatabase : public CResource +{ +public: + CResourceDatabase(LPCTSTR pszName = "") + : m_strName(pszName) + { + } + virtual LPCTSTR GetDisplayName() { return m_strName; } + virtual eRESOURCETYPE GetType() { return eDatabase; } + CString m_strName; + CStringArray m_rgFields; +}; + +///////////////////////////////////////////////////////////////////////////// + +class CResourceTable : public CResource +{ +public: + CResourceTable(LPCTSTR pszName = "") + : m_strName(pszName) + { + } + virtual LPCTSTR GetDisplayName() { return m_strName; } + virtual eRESOURCETYPE GetType() { return eTable; } + CString m_strName; + CStringArray m_rgFields; +}; + + +///////////////////////////////////////////////////////////////////////////// + +class CResourceField : public CResource +{ +public: + CResourceField(LPCTSTR pszName = "") + : m_strName(pszName) + { + } + virtual LPCTSTR GetDisplayName() { return m_strName; } + virtual eRESOURCETYPE GetType() { return eField; } + CString m_strName; + CStringArray m_rgFields; +}; + + + +///////////////////////////////////////////////////////////////////////////// + +class CResourceProcesslist : public CResource +{ +public: + CResourceProcesslist(LPCTSTR pszName = "Processlist") + : m_strName(pszName) + { + } + virtual LPCTSTR GetDisplayName() { return m_strName; } + virtual eRESOURCETYPE GetType() { return eProcesslist; } + CString m_strName; + CStringArray m_rgFields; +}; + +///////////////////////////////////////////////////////////////////////////// + +class CResourceProcesslistItem : public CResourceProcesslist +{ +public: + CResourceProcesslistItem(LPCTSTR pszName = "ProcesslistItem") + : CResourceProcesslist(pszName) + { + } + virtual eRESOURCETYPE GetType() { return eProcesslistItem; } +}; + + +#endif diff --git a/VC++Files/mysqlmanager/mysqlmanager.cpp b/VC++Files/mysqlmanager/mysqlmanager.cpp new file mode 100644 index 00000000000..09a19181e22 --- /dev/null +++ b/VC++Files/mysqlmanager/mysqlmanager.cpp @@ -0,0 +1,168 @@ +// MySqlManager.cpp : Defines the class behaviors for the application. +// + +#include "stdafx.h" +#include "MySqlManager.h" + +#include "MainFrm.h" +#include "ChildFrm.h" +#include "MySqlManagerDoc.h" +#include "MySqlManagerView.h" + +#ifdef _DEBUG + #define new DEBUG_NEW + #undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +///////////////////////////////////////////////////////////////////////////// +// CMySqlManagerApp + +BEGIN_MESSAGE_MAP(CMySqlManagerApp, CWinApp) +//{{AFX_MSG_MAP(CMySqlManagerApp) + ON_COMMAND(ID_APP_ABOUT, OnAppAbout) +// NOTE - the ClassWizard will add and remove mapping macros here. +// DO NOT EDIT what you see in these blocks of generated code! +//}}AFX_MSG_MAP +// Standard file based document commands + ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew) + ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen) +// Standard print setup command + ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup) +END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// +// CMySqlManagerApp construction + +CMySqlManagerApp::CMySqlManagerApp() +{ + // TODO: add construction code here, + // Place all significant initialization in InitInstance +} + +///////////////////////////////////////////////////////////////////////////// +// The one and only CMySqlManagerApp object + +CMySqlManagerApp theApp; + +///////////////////////////////////////////////////////////////////////////// +// CMySqlManagerApp initialization + +BOOL CMySqlManagerApp::InitInstance() +{ + + WSADATA WsaData; + + if (SOCKET_ERROR == WSAStartup (0x0101, &WsaData)) + { + AfxMessageBox("WSAStartup Failed\n"); + return FALSE; + } + + AfxEnableControlContainer(); + + // Standard initialization + // If you are not using these features and wish to reduce the size + // of your final executable, you should remove from the following + // the specific initialization routines you do not need. + +#ifdef _AFXDLL + Enable3dControls(); // Call this when using MFC in a shared DLL +#else + Enable3dControlsStatic(); // Call this when linking to MFC statically +#endif + + // Change the registry key under which our settings are stored. + // You should modify this string to be something appropriate + // such as the name of your company or organization. + SetRegistryKey(_T("Local AppWizard-Generated Applications")); + + LoadStdProfileSettings(); // Load standard INI file options (including MRU) + + // Register the application's document templates. Document templates + // serve as the connection between documents, frame windows and views. + + CMultiDocTemplate* pDocTemplate; + pDocTemplate = new CMultiDocTemplate( + IDR_MYSQLMTYPE, + RUNTIME_CLASS(CMySqlManagerDoc), + RUNTIME_CLASS(CChildFrame), // custom MDI child frame + RUNTIME_CLASS(CMySqlManagerView)); + AddDocTemplate(pDocTemplate); + + // create main MDI Frame window + CMainFrame* pMainFrame = new CMainFrame; + if (!pMainFrame->LoadFrame(IDR_MAINFRAME)) + return FALSE; + m_pMainWnd = pMainFrame; + + // Parse command line for standard shell commands, DDE, file open + CCommandLineInfo cmdInfo; + ParseCommandLine(cmdInfo); + + // Dispatch commands specified on the command line + if (!ProcessShellCommand(cmdInfo)) + return FALSE; + + // The main window has been initialized, so show and update it. + pMainFrame->ShowWindow(m_nCmdShow); + pMainFrame->UpdateWindow(); + + return TRUE; +} + +///////////////////////////////////////////////////////////////////////////// +// CAboutDlg dialog used for App About + +class CAboutDlg : public CDialog +{ +public: + CAboutDlg(); + +// Dialog Data + //{{AFX_DATA(CAboutDlg) + enum {IDD = IDD_ABOUTBOX}; + //}}AFX_DATA + + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CAboutDlg) +protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + //}}AFX_VIRTUAL + +// Implementation +protected: + //{{AFX_MSG(CAboutDlg) + // No message handlers + //}}AFX_MSG + DECLARE_MESSAGE_MAP() +}; + +CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) +{ + //{{AFX_DATA_INIT(CAboutDlg) + //}}AFX_DATA_INIT +} + +void CAboutDlg::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); + //{{AFX_DATA_MAP(CAboutDlg) + //}}AFX_DATA_MAP +} + +BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) +//{{AFX_MSG_MAP(CAboutDlg) +// No message handlers +//}}AFX_MSG_MAP +END_MESSAGE_MAP() + +// App command to run the dialog +void CMySqlManagerApp::OnAppAbout() +{ + CAboutDlg aboutDlg; + aboutDlg.DoModal(); +} + +///////////////////////////////////////////////////////////////////////////// +// CMySqlManagerApp commands diff --git a/VC++Files/mysqlmanager/mysqlmanager.h b/VC++Files/mysqlmanager/mysqlmanager.h new file mode 100644 index 00000000000..accb63a908f --- /dev/null +++ b/VC++Files/mysqlmanager/mysqlmanager.h @@ -0,0 +1,50 @@ +// MySqlManager.h : main header file for the MYSQLMANAGER application +// + +#if !defined(AFX_MYSQLMANAGER_H__826CB2EA_8B6D_11D1_AEC1_00600806E071__INCLUDED_) +#define AFX_MYSQLMANAGER_H__826CB2EA_8B6D_11D1_AEC1_00600806E071__INCLUDED_ + +#if _MSC_VER >= 1000 +#pragma once +#endif // _MSC_VER >= 1000 + +#ifndef __AFXWIN_H__ + #error include 'stdafx.h' before including this file for PCH +#endif + +#include "resource.h" // main symbols + +///////////////////////////////////////////////////////////////////////////// +// CMySqlManagerApp: +// See MySqlManager.cpp for the implementation of this class +// + +class CMySqlManagerApp : public CWinApp +{ +public: + CMySqlManagerApp(); + +// Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CMySqlManagerApp) + public: + virtual BOOL InitInstance(); + //}}AFX_VIRTUAL + +// Implementation + + //{{AFX_MSG(CMySqlManagerApp) + afx_msg void OnAppAbout(); + // NOTE - the ClassWizard will add and remove member functions here. + // DO NOT EDIT what you see in these blocks of generated code ! + //}}AFX_MSG + DECLARE_MESSAGE_MAP() +}; + + +///////////////////////////////////////////////////////////////////////////// + +//{{AFX_INSERT_LOCATION}} +// Microsoft Developer Studio will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_MYSQLMANAGER_H__826CB2EA_8B6D_11D1_AEC1_00600806E071__INCLUDED_) diff --git a/VC++Files/mysqlmanager/mysqlmanager.rc b/VC++Files/mysqlmanager/mysqlmanager.rc new file mode 100644 index 00000000000..1dd9caeb686 --- /dev/null +++ b/VC++Files/mysqlmanager/mysqlmanager.rc @@ -0,0 +1,572 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "#define _AFX_NO_SPLITTER_RESOURCES\r\n" + "#define _AFX_NO_OLE_RESOURCES\r\n" + "#define _AFX_NO_TRACKER_RESOURCES\r\n" + "#define _AFX_NO_PROPERTY_RESOURCES\r\n" + "\r\n" + "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n" + "#ifdef _WIN32\r\n" + "LANGUAGE 9, 1\r\n" + "#pragma code_page(1252)\r\n" + "#endif\r\n" + "#include ""res\\MySqlManager.rc2"" // non-Microsoft Visual C++ edited resources\r\n" + "#include ""afxres.rc"" // Standard components\r\n" + "#include ""afxprint.rc"" // printing/print preview resources\r\n" + "#endif\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDR_MAINFRAME ICON DISCARDABLE "res\\MySqlManager.ico" +IDR_MYSQLMTYPE ICON DISCARDABLE "res\\MySqlManagerDoc.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +IDR_MAINFRAME BITMAP MOVEABLE PURE "res\\Toolbar.bmp" +IDB_BITMAP1 BITMAP DISCARDABLE "res\\bitmap3.bmp" +IDB_QUERY_EXECU BITMAP FIXED IMPURE "res\\query_ex.bmp" +IDB_QUERY_EXECD BITMAP FIXED IMPURE "res\\bmp00001.bmp" +IDB_FONTU BITMAP FIXED IMPURE "res\\fontu.bmp" +IDB_FONTD BITMAP FIXED IMPURE "res\\fontd.bmp" +IDB_DATABASESU BITMAP FIXED IMPURE "res\\database.bmp" +IDB_DATABASESD BITMAP FIXED IMPURE "res\\bmp00002.bmp" + +///////////////////////////////////////////////////////////////////////////// +// +// Toolbar +// + +IDR_MAINFRAME TOOLBAR DISCARDABLE 16, 15 +BEGIN + BUTTON ID_FILE_NEW + BUTTON ID_FILE_OPEN + BUTTON ID_FILE_SAVE + SEPARATOR + BUTTON ID_EDIT_CUT + BUTTON ID_EDIT_COPY + BUTTON ID_EDIT_PASTE + SEPARATOR + BUTTON ID_FILE_PRINT + BUTTON ID_APP_ABOUT +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +IDR_MAINFRAME MENU PRELOAD DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&New\tCtrl+N", ID_FILE_NEW + MENUITEM "&Open...\tCtrl+O", ID_FILE_OPEN + MENUITEM SEPARATOR + MENUITEM "P&rint Setup...", ID_FILE_PRINT_SETUP + MENUITEM SEPARATOR + MENUITEM "Recent File", ID_FILE_MRU_FILE1, GRAYED + MENUITEM SEPARATOR + MENUITEM "E&xit", ID_APP_EXIT + END + POPUP "&View" + BEGIN + MENUITEM "&Toolbar", ID_VIEW_TOOLBAR + MENUITEM "&Status Bar", ID_VIEW_STATUS_BAR + END + POPUP "&Help" + BEGIN + MENUITEM "&About MySqlManager...", ID_APP_ABOUT + END +END + +IDR_MYSQLMTYPE MENU PRELOAD DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&New\tCtrl+N", ID_FILE_NEW + MENUITEM "&Open...\tCtrl+O", ID_FILE_OPEN + MENUITEM "&Close", ID_FILE_CLOSE + MENUITEM "&Save\tCtrl+S", ID_FILE_SAVE + MENUITEM "Save &As...", ID_FILE_SAVE_AS + MENUITEM SEPARATOR + MENUITEM "&Print...\tCtrl+P", ID_FILE_PRINT + MENUITEM "Print Pre&view", ID_FILE_PRINT_PREVIEW + MENUITEM "P&rint Setup...", ID_FILE_PRINT_SETUP + MENUITEM SEPARATOR + MENUITEM "Recent File", ID_FILE_MRU_FILE1, GRAYED + MENUITEM SEPARATOR + MENUITEM "E&xit", ID_APP_EXIT + END + POPUP "&Edit" + BEGIN + MENUITEM "&Undo\tCtrl+Z", ID_EDIT_UNDO + MENUITEM SEPARATOR + MENUITEM "Cu&t\tCtrl+X", ID_EDIT_CUT + MENUITEM "&Copy\tCtrl+C", ID_EDIT_COPY + MENUITEM "&Paste\tCtrl+V", ID_EDIT_PASTE + END + POPUP "&Tools" + BEGIN + MENUITEM "SQL &Query", IDM_SQL_TOOL_QUERY + MENUITEM "Register Server", IDM_TOOLS_REGISTER_SERVER + MENUITEM "Server Properties", IDM_TOOLS_SERVER_PROPERTIES + END + POPUP "&View" + BEGIN + MENUITEM "&Toolbar", ID_VIEW_TOOLBAR + MENUITEM "&Status Bar", ID_VIEW_STATUS_BAR + END + POPUP "&Window" + BEGIN + MENUITEM "&New Window", ID_WINDOW_NEW + MENUITEM "&Cascade", ID_WINDOW_CASCADE + MENUITEM "&Tile", ID_WINDOW_TILE_HORZ + MENUITEM "&Arrange Icons", ID_WINDOW_ARRANGE + END + POPUP "&Help" + BEGIN + MENUITEM "&About MySqlManager...", ID_APP_ABOUT + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +IDR_MAINFRAME ACCELERATORS PRELOAD MOVEABLE PURE +BEGIN + "C", ID_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT + "D", IDM_QUERY_DATABASES, VIRTKEY, ALT, NOINVERT + "E", IDM_QUERY_EXEC, VIRTKEY, CONTROL, NOINVERT + "N", ID_FILE_NEW, VIRTKEY, CONTROL, NOINVERT + "O", ID_FILE_OPEN, VIRTKEY, CONTROL, NOINVERT + "P", ID_FILE_PRINT, VIRTKEY, CONTROL, NOINVERT + "S", ID_FILE_SAVE, VIRTKEY, CONTROL, NOINVERT + "V", ID_EDIT_PASTE, VIRTKEY, CONTROL, NOINVERT + VK_BACK, ID_EDIT_UNDO, VIRTKEY, ALT, NOINVERT + VK_DELETE, ID_EDIT_CUT, VIRTKEY, SHIFT, NOINVERT + VK_F6, ID_NEXT_PANE, VIRTKEY, NOINVERT + VK_F6, ID_PREV_PANE, VIRTKEY, SHIFT, NOINVERT + VK_INSERT, ID_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT + VK_INSERT, ID_EDIT_PASTE, VIRTKEY, SHIFT, NOINVERT + "X", ID_EDIT_CUT, VIRTKEY, CONTROL, NOINVERT + "X", IDM_QUERY_EXEC, VIRTKEY, ALT, NOINVERT + "Z", ID_EDIT_UNDO, VIRTKEY, CONTROL, NOINVERT +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 234, 72 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "About MySqlManager" +FONT 8, "MS Sans Serif" +BEGIN + ICON IDR_MAINFRAME,IDC_STATIC,11,17,20,20 + LTEXT "MySqlManager Version 1.0.2",IDC_STATIC,37,10,119,8, + SS_NOPREFIX + LTEXT "By James Pereira (jpereira@iafrica.com)",IDC_STATIC,37, + 49,146,9 + DEFPUSHBUTTON "OK",IDOK,195,7,32,14,WS_GROUP + LTEXT "This file is public domain and comes with NO WARRANTY of any kind", + IDC_STATIC,38,25,136,18,SS_SUNKEN +END + +IDD_TOOL_SQL DIALOGEX 0, 0, 452, 246 +STYLE DS_3DLOOK | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | + WS_SYSMENU | WS_THICKFRAME +EXSTYLE WS_EX_CLIENTEDGE +CAPTION "mySQL Query Tool" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + PUSHBUTTON "OK",IDOK,369,10,12,14,NOT WS_VISIBLE + DEFPUSHBUTTON "Close",IDCANCEL,391,10,50,14 + CONTROL "Tab1",IDC_TAB1,"SysTabControl32",0x0,11,26,434,213 + CONTROL "IDB_QUERY_EXEC",IDC_QUERY_PB,"Button",BS_OWNERDRAW | + WS_TABSTOP,106,10,12,14 + CONTROL "IDB_FONT",IDC_FONT_PB,"Button",BS_OWNERDRAW | + WS_TABSTOP,123,10,12,14 + COMBOBOX IDC_SERVER_CB,12,9,85,128,CBS_DROPDOWN | CBS_SORT | + WS_VSCROLL | WS_TABSTOP + CONTROL "IDB_DATABASES",IDC_DATABASES_PB,"Button",BS_OWNERDRAW | + WS_TABSTOP,142,10,12,14 + DEFPUSHBUTTON "&Start",IDC_START_PB,315,10,23,14 + DEFPUSHBUTTON "S&top",IDC_STOP_PB,343,10,23,14 + EDITTEXT IDC_TIMER_SECS,287,10,22,14,ES_AUTOHSCROLL + LTEXT "Interval (s)",IDC_STATIC,249,11,34,8 + CONTROL "Clear",IDC_CLEAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 215,11,29,10 +END + +IDD_TOOL_SQL_QUERY DIALOG DISCARDABLE 0, 0, 452, 247 +STYLE WS_CHILD | WS_BORDER +FONT 8, "MS Sans Serif" +BEGIN + EDITTEXT IDC_EDIT,11,11,434,229,ES_MULTILINE | ES_AUTOVSCROLL | + ES_AUTOHSCROLL | ES_WANTRETURN | WS_VSCROLL +END + +IDD_TOOL_SQL_RESULTS DIALOG DISCARDABLE 0, 0, 452, 247 +STYLE WS_CHILD | WS_BORDER +FONT 8, "MS Sans Serif" +BEGIN + EDITTEXT IDC_EDIT,11,11,434,229,ES_MULTILINE | ES_AUTOVSCROLL | + ES_AUTOHSCROLL | WS_VSCROLL +END + +IDD_REGISTER_SERVER DIALOG FIXED IMPURE 0, 0, 281, 199 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Register Server" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "",-1,5,0,270,195 + LTEXT "&Server:",-1,12,14,25,8 + COMBOBOX ID_SERVER_CB,46,12,159,60,CBS_DROPDOWN | CBS_AUTOHSCROLL | + CBS_SORT | WS_VSCROLL | WS_TABSTOP + LTEXT "&Host",-1,12,33,25,8 + COMBOBOX ID_HOST_CB,46,31,159,60,CBS_DROPDOWN | CBS_AUTOHSCROLL | + CBS_SORT | WS_VSCROLL | WS_TABSTOP + LTEXT "&Port",-1,12,53,25,8 + COMBOBOX ID_PORT_CB,46,50,159,60,CBS_DROPDOWN | CBS_AUTOHSCROLL | + CBS_SORT | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Login Information",-1,12,82,194,76 + CONTROL "Use S&tandard Security",ID_USE_STANDARD_CK,"Button", + BS_AUTORADIOBUTTON | WS_GROUP,19,107,94,11 + CONTROL "Use Tr&usted Connection",ID_USE_TRUSTED_CK,"Button", + BS_AUTORADIOBUTTON,19,94,99,11 + LTEXT "&Login ID:",1060,37,124,35,8 + EDITTEXT ID_USER,77,122,120,12,ES_AUTOHSCROLL | WS_GROUP + LTEXT "&Password:",1061,37,140,35,8 + EDITTEXT ID_PASSWORD,77,138,120,12,ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "S&erver Group:",-1,12,164,24,25 + CONTROL "&Display Server Status in Server Manager", + ID_DISPLAY_SERVER_STATUS_CK,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,44,168,152,10 + DEFPUSHBUTTON "&Register",IDOK,214,11,53,14 + PUSHBUTTON "Re&move",ID_REMOVE_PB,214,27,53,14 + PUSHBUTTON "&Close",IDCANCEL,214,43,53,14 + PUSHBUTTON "&Help",ID_HELP,214,59,53,14 + PUSHBUTTON "Ser&vers...",ID_SERVERS_PB,214,92,53,14 + PUSHBUTTON "&Groups...",ID_GROUPS_PB,214,108,53,14 +END + +IDD_TOOL_SQL_STATUS DIALOG DISCARDABLE 0, 0, 452, 247 +STYLE WS_CHILD | WS_BORDER +FONT 8, "MS Sans Serif" +BEGIN + EDITTEXT IDC_EDIT,11,11,434,229,ES_MULTILINE | ES_AUTOVSCROLL | + ES_AUTOHSCROLL | WS_VSCROLL +END + + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,2 + PRODUCTVERSION 1,0,0,2 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "\0" + VALUE "FileDescription", "MySqlManager MFC Application\0" + VALUE "FileVersion", "1, 0, 0, 2\0" + VALUE "InternalName", "MySqlManager\0" + VALUE "LegalCopyright", "Copyright (C) 1998\0" + VALUE "OriginalFilename", "MySqlManager.EXE\0" + VALUE "ProductName", "MySqlManager Application\0" + VALUE "ProductVersion", "1, 0, 0, 2\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // !_MAC + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO DISCARDABLE +BEGIN + IDD_ABOUTBOX, DIALOG + BEGIN + LEFTMARGIN, 6 + RIGHTMARGIN, 227 + TOPMARGIN, 7 + BOTTOMMARGIN, 65 + END + + IDD_TOOL_SQL, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 445 + TOPMARGIN, 7 + BOTTOMMARGIN, 239 + END + + IDD_TOOL_SQL_QUERY, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 445 + TOPMARGIN, 7 + BOTTOMMARGIN, 240 + END + + IDD_TOOL_SQL_RESULTS, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 445 + TOPMARGIN, 7 + BOTTOMMARGIN, 240 + END + + IDD_TOOL_SQL_STATUS, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 445 + TOPMARGIN, 7 + BOTTOMMARGIN, 240 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE PRELOAD DISCARDABLE +BEGIN + IDR_MAINFRAME "MySqlManager" + IDR_MYSQLMTYPE "\nMySqlM\nMySqlM\n\n\nMySqlManager.Document\nMySqlM Document" +END + +STRINGTABLE PRELOAD DISCARDABLE +BEGIN + AFX_IDS_APP_TITLE "MySqlManager" + AFX_IDS_IDLEMESSAGE "Ready" + IDS_QUERY_DATABASES "Query Database(s)" + IDS_REFRESH "Refresh" +END + +STRINGTABLE DISCARDABLE +BEGIN + ID_INDICATOR_EXT "EXT" + ID_INDICATOR_CAPS "CAP" + ID_INDICATOR_NUM "NUM" + ID_INDICATOR_SCRL "SCRL" + ID_INDICATOR_OVR "OVR" + ID_INDICATOR_REC "REC" +END + +STRINGTABLE DISCARDABLE +BEGIN + ID_FILE_NEW "Create a new document\nNew" + ID_FILE_OPEN "Open an existing document\nOpen" + ID_FILE_CLOSE "Close the active document\nClose" + ID_FILE_SAVE "Save the active document\nSave" + ID_FILE_SAVE_AS "Save the active document with a new name\nSave As" + ID_FILE_PAGE_SETUP "Change the printing options\nPage Setup" + ID_FILE_PRINT_SETUP "Change the printer and printing options\nPrint Setup" + ID_FILE_PRINT "Print the active document\nPrint" + ID_FILE_PRINT_PREVIEW "Display full pages\nPrint Preview" +END + +STRINGTABLE DISCARDABLE +BEGIN + ID_APP_ABOUT "Display program information, version number and copyright\nAbout" + ID_APP_EXIT "Quit the application; prompts to save documents\nExit" +END + +STRINGTABLE DISCARDABLE +BEGIN + ID_FILE_MRU_FILE1 "Open this document" + ID_FILE_MRU_FILE2 "Open this document" + ID_FILE_MRU_FILE3 "Open this document" + ID_FILE_MRU_FILE4 "Open this document" + ID_FILE_MRU_FILE5 "Open this document" + ID_FILE_MRU_FILE6 "Open this document" + ID_FILE_MRU_FILE7 "Open this document" + ID_FILE_MRU_FILE8 "Open this document" + ID_FILE_MRU_FILE9 "Open this document" + ID_FILE_MRU_FILE10 "Open this document" + ID_FILE_MRU_FILE11 "Open this document" + ID_FILE_MRU_FILE12 "Open this document" + ID_FILE_MRU_FILE13 "Open this document" + ID_FILE_MRU_FILE14 "Open this document" + ID_FILE_MRU_FILE15 "Open this document" + ID_FILE_MRU_FILE16 "Open this document" +END + +STRINGTABLE DISCARDABLE +BEGIN + ID_NEXT_PANE "Switch to the next window pane\nNext Pane" + ID_PREV_PANE "Switch back to the previous window pane\nPrevious Pane" +END + +STRINGTABLE DISCARDABLE +BEGIN + ID_WINDOW_NEW "Open another window for the active document\nNew Window" + ID_WINDOW_ARRANGE "Arrange icons at the bottom of the window\nArrange Icons" + ID_WINDOW_CASCADE "Arrange windows so they overlap\nCascade Windows" + ID_WINDOW_TILE_HORZ "Arrange windows as non-overlapping tiles\nTile Windows" + ID_WINDOW_TILE_VERT "Arrange windows as non-overlapping tiles\nTile Windows" + ID_WINDOW_SPLIT "Split the active window into panes\nSplit" +END + +STRINGTABLE DISCARDABLE +BEGIN + ID_EDIT_CLEAR "Erase the selection\nErase" + ID_EDIT_CLEAR_ALL "Erase everything\nErase All" + ID_EDIT_COPY "Copy the selection and put it on the Clipboard\nCopy" + ID_EDIT_CUT "Cut the selection and put it on the Clipboard\nCut" + ID_EDIT_FIND "Find the specified text\nFind" + ID_EDIT_PASTE "Insert Clipboard contents\nPaste" + ID_EDIT_REPEAT "Repeat the last action\nRepeat" + ID_EDIT_REPLACE "Replace specific text with different text\nReplace" + ID_EDIT_SELECT_ALL "Select the entire document\nSelect All" + ID_EDIT_UNDO "Undo the last action\nUndo" + ID_EDIT_REDO "Redo the previously undone action\nRedo" +END + +STRINGTABLE DISCARDABLE +BEGIN + ID_VIEW_TOOLBAR "Show or hide the toolbar\nToggle ToolBar" + ID_VIEW_STATUS_BAR "Show or hide the status bar\nToggle StatusBar" +END + +STRINGTABLE DISCARDABLE +BEGIN + AFX_IDS_SCSIZE "Change the window size" + AFX_IDS_SCMOVE "Change the window position" + AFX_IDS_SCMINIMIZE "Reduce the window to an icon" + AFX_IDS_SCMAXIMIZE "Enlarge the window to full size" + AFX_IDS_SCNEXTWINDOW "Switch to the next document window" + AFX_IDS_SCPREVWINDOW "Switch to the previous document window" + AFX_IDS_SCCLOSE "Close the active window and prompts to save the documents" +END + +STRINGTABLE DISCARDABLE +BEGIN + AFX_IDS_SCRESTORE "Restore the window to normal size" + AFX_IDS_SCTASKLIST "Activate Task List" + AFX_IDS_MDICHILD "Activate this window" +END + +STRINGTABLE DISCARDABLE +BEGIN + AFX_IDS_PREVIEW_CLOSE "Close print preview mode\nCancel Preview" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDC_QUERY_PB "Execute Query" + IDS_QUERY_EXEC "Execute Query" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// +#define _AFX_NO_SPLITTER_RESOURCES +#define _AFX_NO_OLE_RESOURCES +#define _AFX_NO_TRACKER_RESOURCES +#define _AFX_NO_PROPERTY_RESOURCES + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE 9, 1 +#pragma code_page(1252) +#endif +#include "res\MySqlManager.rc2" // non-Microsoft Visual C++ edited resources +#include "afxres.rc" // Standard components +#include "afxprint.rc" // printing/print preview resources +#endif +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/VC++Files/mysqlmanager/mysqlmanagerdoc.cpp b/VC++Files/mysqlmanager/mysqlmanagerdoc.cpp new file mode 100644 index 00000000000..c89ce693a60 --- /dev/null +++ b/VC++Files/mysqlmanager/mysqlmanagerdoc.cpp @@ -0,0 +1,84 @@ +// MySqlManagerDoc.cpp : implementation of the CMySqlManagerDoc class +// + +#include "stdafx.h" +#include "MySqlManager.h" + +#include "MySqlManagerDoc.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +///////////////////////////////////////////////////////////////////////////// +// CMySqlManagerDoc + +IMPLEMENT_DYNCREATE(CMySqlManagerDoc, CDocument) + +BEGIN_MESSAGE_MAP(CMySqlManagerDoc, CDocument) + //{{AFX_MSG_MAP(CMySqlManagerDoc) + // NOTE - the ClassWizard will add and remove mapping macros here. + // DO NOT EDIT what you see in these blocks of generated code! + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// +// CMySqlManagerDoc construction/destruction + +CMySqlManagerDoc::CMySqlManagerDoc() +{ + // TODO: add one-time construction code here + +} + +CMySqlManagerDoc::~CMySqlManagerDoc() +{ +} + +BOOL CMySqlManagerDoc::OnNewDocument() +{ + if (!CDocument::OnNewDocument()) + return FALSE; + + // TODO: add reinitialization code here + // (SDI documents will reuse this document) + + return TRUE; +} + + + +///////////////////////////////////////////////////////////////////////////// +// CMySqlManagerDoc serialization + +void CMySqlManagerDoc::Serialize(CArchive& ar) +{ + if (ar.IsStoring()) + { + // TODO: add storing code here + } + else + { + // TODO: add loading code here + } +} + +///////////////////////////////////////////////////////////////////////////// +// CMySqlManagerDoc diagnostics + +#ifdef _DEBUG +void CMySqlManagerDoc::AssertValid() const +{ + CDocument::AssertValid(); +} + +void CMySqlManagerDoc::Dump(CDumpContext& dc) const +{ + CDocument::Dump(dc); +} +#endif //_DEBUG + +///////////////////////////////////////////////////////////////////////////// +// CMySqlManagerDoc commands diff --git a/VC++Files/mysqlmanager/mysqlmanagerdoc.h b/VC++Files/mysqlmanager/mysqlmanagerdoc.h new file mode 100644 index 00000000000..f4a4d35cfd5 --- /dev/null +++ b/VC++Files/mysqlmanager/mysqlmanagerdoc.h @@ -0,0 +1,57 @@ +// MySqlManagerDoc.h : interface of the CMySqlManagerDoc class +// +///////////////////////////////////////////////////////////////////////////// + +#if !defined(AFX_MYSQLMANAGERDOC_H__826CB2F2_8B6D_11D1_AEC1_00600806E071__INCLUDED_) +#define AFX_MYSQLMANAGERDOC_H__826CB2F2_8B6D_11D1_AEC1_00600806E071__INCLUDED_ + +#if _MSC_VER >= 1000 +#pragma once +#endif // _MSC_VER >= 1000 + + +class CMySqlManagerDoc : public CDocument +{ +protected: // create from serialization only + CMySqlManagerDoc(); + DECLARE_DYNCREATE(CMySqlManagerDoc) + +// Attributes +public: + +// Operations +public: + +// Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CMySqlManagerDoc) + public: + virtual BOOL OnNewDocument(); + virtual void Serialize(CArchive& ar); + //}}AFX_VIRTUAL + +// Implementation +public: + virtual ~CMySqlManagerDoc(); +#ifdef _DEBUG + virtual void AssertValid() const; + virtual void Dump(CDumpContext& dc) const; +#endif + +protected: + +// Generated message map functions +protected: + //{{AFX_MSG(CMySqlManagerDoc) + // NOTE - the ClassWizard will add and remove member functions here. + // DO NOT EDIT what you see in these blocks of generated code ! + //}}AFX_MSG + DECLARE_MESSAGE_MAP() +}; + +///////////////////////////////////////////////////////////////////////////// + +//{{AFX_INSERT_LOCATION}} +// Microsoft Developer Studio will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_MYSQLMANAGERDOC_H__826CB2F2_8B6D_11D1_AEC1_00600806E071__INCLUDED_) diff --git a/VC++Files/mysqlmanager/mysqlmanagerview.cpp b/VC++Files/mysqlmanager/mysqlmanagerview.cpp new file mode 100644 index 00000000000..1d4756e7d7a --- /dev/null +++ b/VC++Files/mysqlmanager/mysqlmanagerview.cpp @@ -0,0 +1,849 @@ +// 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; + +} diff --git a/VC++Files/mysqlmanager/mysqlmanagerview.h b/VC++Files/mysqlmanager/mysqlmanagerview.h new file mode 100644 index 00000000000..97f5a2596d1 --- /dev/null +++ b/VC++Files/mysqlmanager/mysqlmanagerview.h @@ -0,0 +1,89 @@ +// MySqlManagerView.h : interface of the CMySqlManagerView class +// +///////////////////////////////////////////////////////////////////////////// + +#if !defined(AFX_MYSQLMANAGERVIEW_H__826CB2F4_8B6D_11D1_AEC1_00600806E071__INCLUDED_) +#define AFX_MYSQLMANAGERVIEW_H__826CB2F4_8B6D_11D1_AEC1_00600806E071__INCLUDED_ + +#if _MSC_VER >= 1000 +#pragma once +#endif // _MSC_VER >= 1000 + +#include <afxcview.h> +#include "cresource.h" + +class CToolSql; + +class CMySqlManagerView : public CTreeView +{ +protected: // create from serialization only + CMySqlManagerView(); + DECLARE_DYNCREATE(CMySqlManagerView) + +// Attributes +public: + CMySqlManagerDoc* GetDocument(); + +// Operations +public: + +// Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CMySqlManagerView) + public: + virtual void OnDraw(CDC* pDC); // overridden to draw this view + virtual BOOL PreCreateWindow(CREATESTRUCT& cs); + virtual void OnInitialUpdate(); + virtual BOOL PreTranslateMessage(MSG* pMsg); + protected: + virtual BOOL OnPreparePrinting(CPrintInfo* pInfo); + virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo); + virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo); + //}}AFX_VIRTUAL + +// Implementation + + CResource* GetSelectedResource(HTREEITEM* phItemRet=NULL); + CResourceServer* GetServerResource(HTREEITEM hItem); + + HTREEITEM AddResource ( HTREEITEM hParent, CResource* pRes, HTREEITEM hLastItem = TVI_FIRST ) ; + void ProcessResultSet ( HTREEITEM hItem, LPVOID result, CResource* pResource ); + +public: + virtual ~CMySqlManagerView(); +#ifdef _DEBUG + virtual void AssertValid() const; + virtual void Dump(CDumpContext& dc) const; +#endif + +protected: + + CTreeCtrl* m_pTree; + CImageList* m_pImages; + CBitmap* m_pbmBmp; + CToolSql* m_pTool; + +// Generated message map functions +protected: + //{{AFX_MSG(CMySqlManagerView) + afx_msg void OnDblclk(NMHDR* pNMHDR, LRESULT* pResult); + afx_msg void OnSqlToolQuery(); + afx_msg void OnRefresh(); + afx_msg void OnRegisterServer(); + afx_msg void OnServerProperties(); + afx_msg void OnRclick(NMHDR* pNMHDR, LRESULT* pResult); + //}}AFX_MSG + DECLARE_MESSAGE_MAP() +}; + +#ifndef _DEBUG // debug version in MySqlManagerView.cpp +inline CMySqlManagerDoc* CMySqlManagerView::GetDocument() + { return (CMySqlManagerDoc*)m_pDocument; } +#endif + +///////////////////////////////////////////////////////////////////////////// + +//{{AFX_INSERT_LOCATION}} +// Microsoft Developer Studio will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_MYSQLMANAGERVIEW_H__826CB2F4_8B6D_11D1_AEC1_00600806E071__INCLUDED_) diff --git a/VC++Files/mysqlmanager/registerserver.cpp b/VC++Files/mysqlmanager/registerserver.cpp new file mode 100644 index 00000000000..a0e9dcca3df --- /dev/null +++ b/VC++Files/mysqlmanager/registerserver.cpp @@ -0,0 +1,51 @@ +// RegisterServer.cpp : implementation file +// + +#include "stdafx.h" +#include "mysqlmanager.h" +#include "RegisterServer.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +///////////////////////////////////////////////////////////////////////////// +// CRegisterServer dialog + + +CRegisterServer::CRegisterServer(CWnd* pParent /*=NULL*/) + : CDialog(CRegisterServer::IDD, pParent) + , m_strServer("servername") + , m_strHost("localhost") + , m_strUser("root") + , m_strPassword("") +{ + //{{AFX_DATA_INIT(CRegisterServer) + m_strPort = _T("3306"); + //}}AFX_DATA_INIT +} + + +void CRegisterServer::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); + //{{AFX_DATA_MAP(CRegisterServer) + DDX_CBString(pDX, ID_SERVER_CB, m_strServer); + DDX_CBString(pDX, ID_HOST_CB, m_strHost); + DDX_Text(pDX, ID_USER, m_strUser); + DDX_Text(pDX, ID_PASSWORD, m_strPassword); + DDX_CBString(pDX, ID_PORT_CB, m_strPort); + //}}AFX_DATA_MAP +} + + +BEGIN_MESSAGE_MAP(CRegisterServer, CDialog) + //{{AFX_MSG_MAP(CRegisterServer) + // NOTE: the ClassWizard will add message map macros here + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// +// CRegisterServer message handlers diff --git a/VC++Files/mysqlmanager/registerserver.h b/VC++Files/mysqlmanager/registerserver.h new file mode 100644 index 00000000000..f4ac2356b2c --- /dev/null +++ b/VC++Files/mysqlmanager/registerserver.h @@ -0,0 +1,50 @@ +#if !defined(AFX_REGISTERSERVER_H__826CB2FF_8B6D_11D1_AEC1_00600806E071__INCLUDED_) +#define AFX_REGISTERSERVER_H__826CB2FF_8B6D_11D1_AEC1_00600806E071__INCLUDED_ + +#if _MSC_VER >= 1000 +#pragma once +#endif // _MSC_VER >= 1000 +// RegisterServer.h : header file +// + +///////////////////////////////////////////////////////////////////////////// +// CRegisterServer dialog + +class CRegisterServer : public CDialog +{ +// Construction +public: + CRegisterServer(CWnd* pParent = NULL); // standard constructor + +// Dialog Data + //{{AFX_DATA(CRegisterServer) + enum { IDD = IDD_REGISTER_SERVER }; + CString m_strServer; + CString m_strHost; + CString m_strUser; + CString m_strPassword; + CString m_strPort; + //}}AFX_DATA + + +// Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CRegisterServer) + protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + //}}AFX_VIRTUAL + +// Implementation +protected: + + // Generated message map functions + //{{AFX_MSG(CRegisterServer) + // NOTE: the ClassWizard will add member functions here + //}}AFX_MSG + DECLARE_MESSAGE_MAP() +}; + +//{{AFX_INSERT_LOCATION}} +// Microsoft Developer Studio will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_REGISTERSERVER_H__826CB2FF_8B6D_11D1_AEC1_00600806E071__INCLUDED_) diff --git a/VC++Files/mysqlmanager/toolsqlquery.cpp b/VC++Files/mysqlmanager/toolsqlquery.cpp new file mode 100644 index 00000000000..1f246f47786 --- /dev/null +++ b/VC++Files/mysqlmanager/toolsqlquery.cpp @@ -0,0 +1,110 @@ +// ToolSqlQuery.cpp : implementation file +// + +#include "stdafx.h" +#include "MySqlManager.h" +#include "ToolSqlQuery.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +///////////////////////////////////////////////////////////////////////////// + +CToolSqlQuery::CToolSqlQuery(CWnd* pParent /*=NULL*/) + : CDialog(CToolSqlQuery::IDD, pParent) +{ + //{{AFX_DATA_INIT(CToolSqlQuery) + m_edit = _T(""); + //}}AFX_DATA_INIT +} + + +///////////////////////////////////////////////////////////////////////////// + +void CToolSqlQuery::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); + //{{AFX_DATA_MAP(CToolSqlQuery) + DDX_Control(pDX, IDC_EDIT, m_ctl_edit); + DDX_Text(pDX, IDC_EDIT, m_edit); + //}}AFX_DATA_MAP +} + + +BEGIN_MESSAGE_MAP(CToolSqlQuery, CDialog) + //{{AFX_MSG_MAP(CToolSqlQuery) + ON_WM_SIZE() + ON_WM_CLOSE() + ON_COMMAND(IDM_QUERY_EXEC, OnQueryPb) + ON_COMMAND(IDM_QUERY_DATABASES, OnQueryDatabases) + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// + +void CToolSqlQuery::SetFont(CFont* pFont, BOOL bRedraw) +{ + m_ctl_edit.SetFont(pFont,bRedraw); + m_ctl_edit.Invalidate(); + m_ctl_edit.UpdateWindow(); +} + +///////////////////////////////////////////////////////////////////////////// + +void CToolSqlQuery::OnSize(UINT nType, int cx, int cy) +{ + CDialog::OnSize(nType, cx, cy); + if (IsWindow(m_ctl_edit.GetSafeHwnd())) + m_ctl_edit.SetWindowPos(NULL,20,24,cx-40,cy-48,SWP_NOZORDER | SWP_NOMOVE); +} + +///////////////////////////////////////////////////////////////////////////// + +void CToolSqlQuery::OnCancel() +{ +} + +///////////////////////////////////////////////////////////////////////////// + +void CToolSqlQuery::OnClose() +{ +} + +///////////////////////////////////////////////////////////////////////////// + +void CToolSqlQuery::OnQueryPb() +{ + GetParent()->GetParent()->PostMessage(WM_COMMAND,IDM_QUERY_EXEC); +} + +///////////////////////////////////////////////////////////////////////////// + +void CToolSqlQuery::OnQueryDatabases() +{ + GetParent()->GetParent()->PostMessage(WM_COMMAND,IDM_QUERY_DATABASES); +} +///////////////////////////////////////////////////////////////////////////// + +BOOL CToolSqlQuery::PreTranslateMessage(MSG* pMsg) +{ + if (pMsg->message >= WM_KEYFIRST && pMsg->message <= WM_KEYLAST) + { + if (::TranslateAccelerator(m_hWnd, m_hAccel, pMsg)) + return TRUE; + } + return CDialog::PreTranslateMessage(pMsg); +} + +///////////////////////////////////////////////////////////////////////////// + +BOOL CToolSqlQuery::OnInitDialog() +{ + + CDialog::OnInitDialog(); + m_hAccel = ::LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE ( IDR_MAINFRAME )); + return TRUE; // return TRUE unless you set the focus to a control + // EXCEPTION: OCX Property Pages should return FALSE +} diff --git a/VC++Files/mysqlmanager/toolsqlquery.h b/VC++Files/mysqlmanager/toolsqlquery.h new file mode 100644 index 00000000000..c5d318c161b --- /dev/null +++ b/VC++Files/mysqlmanager/toolsqlquery.h @@ -0,0 +1,60 @@ +#if !defined(AFX_TOOLSQLQUERY_H__826CB2FD_8B6D_11D1_AEC1_00600806E071__INCLUDED_) +#define AFX_TOOLSQLQUERY_H__826CB2FD_8B6D_11D1_AEC1_00600806E071__INCLUDED_ + +#if _MSC_VER >= 1000 +#pragma once +#endif // _MSC_VER >= 1000 +// ToolSqlQuery.h : header file +// + +///////////////////////////////////////////////////////////////////////////// +// CToolSqlQuery dialog + +class CToolSqlQuery : public CDialog +{ +// Construction +public: + CToolSqlQuery(CWnd* pParent = NULL); // standard constructor + +// Dialog Data + //{{AFX_DATA(CToolSqlQuery) + enum { IDD = IDD_TOOL_SQL_QUERY }; + CEdit m_ctl_edit; + CString m_edit; + //}}AFX_DATA + + HACCEL m_hAccel; + + void SetFont(CFont* pFont, BOOL bRedraw = TRUE); + +// Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CToolSqlQuery) + public: + virtual BOOL PreTranslateMessage(MSG* pMsg); + protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + //}}AFX_VIRTUAL + +// Implementation + +protected: + + // Generated message map functions + //{{AFX_MSG(CToolSqlQuery) + afx_msg void OnSize(UINT nType, int cx, int cy); + afx_msg void OnCancel(); + afx_msg void OnClose(); + virtual BOOL OnInitDialog(); + //}}AFX_MSG + DECLARE_MESSAGE_MAP() + + afx_msg void OnQueryPb(); + afx_msg void OnQueryDatabases(); + +}; + +//{{AFX_INSERT_LOCATION}} +// Microsoft Developer Studio will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_TOOLSQLQUERY_H__826CB2FD_8B6D_11D1_AEC1_00600806E071__INCLUDED_) diff --git a/VC++Files/mysqlmanager/toolsqlresults.cpp b/VC++Files/mysqlmanager/toolsqlresults.cpp new file mode 100644 index 00000000000..b6cfcded18b --- /dev/null +++ b/VC++Files/mysqlmanager/toolsqlresults.cpp @@ -0,0 +1,73 @@ +// ToolSqlResults.cpp : implementation file +// + +#include "stdafx.h" +#include "MySqlManager.h" +#include "ToolSqlResults.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +///////////////////////////////////////////////////////////////////////////// + +CToolSqlResults::CToolSqlResults(CWnd* pParent /*=NULL*/) + : CDialog(CToolSqlResults::IDD, pParent) +{ + //{{AFX_DATA_INIT(CToolSqlResults) + m_edit = _T(""); + //}}AFX_DATA_INIT +} + + +///////////////////////////////////////////////////////////////////////////// + +void CToolSqlResults::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); + //{{AFX_DATA_MAP(CToolSqlResults) + DDX_Control(pDX, IDC_EDIT, m_ctl_edit); + DDX_Text(pDX, IDC_EDIT, m_edit); + //}}AFX_DATA_MAP +} + + +BEGIN_MESSAGE_MAP(CToolSqlResults, CDialog) + //{{AFX_MSG_MAP(CToolSqlResults) + ON_WM_SIZE() + ON_WM_CLOSE() + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// + +void CToolSqlResults::SetFont(CFont* pFont, BOOL bRedraw) +{ + m_ctl_edit.SetFont(pFont,bRedraw); + m_ctl_edit.Invalidate(); + m_ctl_edit.UpdateWindow(); +} + + +///////////////////////////////////////////////////////////////////////////// + +void CToolSqlResults::OnSize(UINT nType, int cx, int cy) +{ + CDialog::OnSize(nType, cx, cy); + if (IsWindow(m_ctl_edit.GetSafeHwnd())) + m_ctl_edit.SetWindowPos(NULL,20,24,cx-40,cy-48,SWP_NOZORDER | SWP_NOMOVE); +} + +///////////////////////////////////////////////////////////////////////////// + +void CToolSqlResults::OnCancel() +{ +} + +///////////////////////////////////////////////////////////////////////////// + +void CToolSqlResults::OnClose() +{ +} diff --git a/VC++Files/mysqlmanager/toolsqlresults.h b/VC++Files/mysqlmanager/toolsqlresults.h new file mode 100644 index 00000000000..c4de651cb81 --- /dev/null +++ b/VC++Files/mysqlmanager/toolsqlresults.h @@ -0,0 +1,53 @@ +#if !defined(AFX_TOOLSQLRESULTS_H__826CB2FE_8B6D_11D1_AEC1_00600806E071__INCLUDED_) +#define AFX_TOOLSQLRESULTS_H__826CB2FE_8B6D_11D1_AEC1_00600806E071__INCLUDED_ + +#if _MSC_VER >= 1000 +#pragma once +#endif // _MSC_VER >= 1000 +// ToolSqlResults.h : header file +// + +///////////////////////////////////////////////////////////////////////////// +// CToolSqlResults dialog + +class CToolSqlResults : public CDialog +{ +// Construction +public: + CToolSqlResults(CWnd* pParent = NULL); // standard constructor + +// Dialog Data + //{{AFX_DATA(CToolSqlResults) + enum { IDD = IDD_TOOL_SQL_RESULTS }; + CEdit m_ctl_edit; + CString m_edit; + //}}AFX_DATA + + void SetFont(CFont* pFont, BOOL bRedraw = TRUE); + +// Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CToolSqlResults) + protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + //}}AFX_VIRTUAL + +// Implementation + +protected: + + // Generated message map functions + //{{AFX_MSG(CToolSqlResults) + afx_msg void OnSize(UINT nType, int cx, int cy); + afx_msg void OnCancel(); + afx_msg void OnClose(); + //}}AFX_MSG + DECLARE_MESSAGE_MAP() + + +}; + +//{{AFX_INSERT_LOCATION}} +// Microsoft Developer Studio will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_TOOLSQLRESULTS_H__826CB2FE_8B6D_11D1_AEC1_00600806E071__INCLUDED_) diff --git a/VC++Files/mysqlmanager/toolsqlstatus.cpp b/VC++Files/mysqlmanager/toolsqlstatus.cpp new file mode 100644 index 00000000000..81605480783 --- /dev/null +++ b/VC++Files/mysqlmanager/toolsqlstatus.cpp @@ -0,0 +1,50 @@ +// ToolSqlStatus.cpp : implementation file +// + +#include "stdafx.h" +#include "mysqlmanager.h" +#include "ToolSqlStatus.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +///////////////////////////////////////////////////////////////////////////// +// CToolSqlStatus dialog + + +CToolSqlStatus::CToolSqlStatus(CWnd* pParent /*=NULL*/) + : CDialog(CToolSqlStatus::IDD, pParent) +{ + //{{AFX_DATA_INIT(CToolSqlStatus) + m_edit = _T(""); + //}}AFX_DATA_INIT +} + + +void CToolSqlStatus::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); + //{{AFX_DATA_MAP(CToolSqlStatus) + DDX_Control(pDX, IDC_EDIT, m_ctl_edit); + DDX_Text(pDX, IDC_EDIT, m_edit); + //}}AFX_DATA_MAP +} + + +BEGIN_MESSAGE_MAP(CToolSqlStatus, CDialog) + //{{AFX_MSG_MAP(CToolSqlStatus) + ON_WM_DESTROY() + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// +// CToolSqlStatus message handlers + +void CToolSqlStatus::OnDestroy() +{ + CDialog::OnDestroy(); + +} diff --git a/VC++Files/mysqlmanager/toolsqlstatus.h b/VC++Files/mysqlmanager/toolsqlstatus.h new file mode 100644 index 00000000000..5e4883b0b30 --- /dev/null +++ b/VC++Files/mysqlmanager/toolsqlstatus.h @@ -0,0 +1,47 @@ +#if !defined(AFX_TOOLSQLSTATUS_H__40C861B4_9E5A_11D1_AED0_00600806E071__INCLUDED_) +#define AFX_TOOLSQLSTATUS_H__40C861B4_9E5A_11D1_AED0_00600806E071__INCLUDED_ + +#if _MSC_VER >= 1000 +#pragma once +#endif // _MSC_VER >= 1000 +// ToolSqlStatus.h : header file +// + +///////////////////////////////////////////////////////////////////////////// +// CToolSqlStatus dialog + +class CToolSqlStatus : public CDialog +{ +// Construction +public: + CToolSqlStatus(CWnd* pParent = NULL); // standard constructor + +// Dialog Data + //{{AFX_DATA(CToolSqlStatus) + enum { IDD = IDD_TOOL_SQL_STATUS }; + CEdit m_ctl_edit; + CString m_edit; + //}}AFX_DATA + + +// Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CToolSqlStatus) + protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + //}}AFX_VIRTUAL + +// Implementation +protected: + + // Generated message map functions + //{{AFX_MSG(CToolSqlStatus) + afx_msg void OnDestroy(); + //}}AFX_MSG + DECLARE_MESSAGE_MAP() +}; + +//{{AFX_INSERT_LOCATION}} +// Microsoft Developer Studio will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_TOOLSQLSTATUS_H__40C861B4_9E5A_11D1_AED0_00600806E071__INCLUDED_) diff --git a/VC++Files/mysqlshutdown/MYSQL.ICO b/VC++Files/mysqlshutdown/MYSQL.ICO Binary files differnew file mode 100644 index 00000000000..1fe0b7115bb --- /dev/null +++ b/VC++Files/mysqlshutdown/MYSQL.ICO diff --git a/VC++Files/mysqlshutdown/mysqlshutdown.rc b/VC++Files/mysqlshutdown/mysqlshutdown.rc new file mode 100644 index 00000000000..01babed1c98 --- /dev/null +++ b/VC++Files/mysqlshutdown/mysqlshutdown.rc @@ -0,0 +1,2 @@ +MySql ICON DISCARDABLE "MYSQL.ICO"
+
diff --git a/VC++Files/mysys/mysys.dsp b/VC++Files/mysys/mysys.dsp index 42213b16cf5..c4c21d9a6db 100644 --- a/VC++Files/mysys/mysys.dsp +++ b/VC++Files/mysys/mysys.dsp @@ -26,7 +26,7 @@ CFG=mysys - Win32 Debug # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" -CPP=xicl6.exe +CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "mysys - Win32 Release" @@ -42,14 +42,14 @@ RSC=rc.exe # PROP Intermediate_Dir "release" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /D "NDEBUG" /D "DBUG_OFF" /D "_WINDOWS" /FD /c +# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../zlib" /D "NDEBUG" /D "DBUG_OFF" /D "_WINDOWS" /FD /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x409 # ADD RSC /l 0x409 BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo -LIB32=xilink6.exe -lib +LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\lib_release\mysys.lib" @@ -66,14 +66,14 @@ LIB32=xilink6.exe -lib # PROP Intermediate_Dir "debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /G6 /MTd /W3 /ZI /Od /I "../include" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_WINDOWS" /D "USE_SYMDIR" /FD /c +# ADD CPP /nologo /G6 /MTd /W3 /ZI /Od /I "../include" /I "../zlib" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_WINDOWS" /D "USE_SYMDIR" /FD /c # SUBTRACT CPP /Fr # ADD BASE RSC /l 0x409 # ADD RSC /l 0x409 BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo -LIB32=xilink6.exe -lib +LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\lib_debug\mysys.lib" @@ -86,8 +86,8 @@ LIB32=xilink6.exe -lib # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 -# PROP Output_Dir "max" -# PROP Intermediate_Dir "max" +# PROP Output_Dir "mysys___Win32_Max" +# PROP Intermediate_Dir "mysys___Win32_Max" # PROP Target_Dir "" # ADD BASE CPP /nologo /G6 /MT /W3 /O2 /I "../include" /D "NDEBUG" /D "DBUG_OFF" /D "_WINDOWS" /FD /c # SUBTRACT BASE CPP /YX @@ -98,7 +98,7 @@ LIB32=xilink6.exe -lib BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo -LIB32=xilink6.exe -lib +LIB32=link.exe -lib # ADD BASE LIB32 /nologo /out:"..\lib_release\mysys.lib" # ADD LIB32 /nologo /out:"..\lib_release\mysys-max.lib" @@ -283,19 +283,6 @@ SOURCE=.\my_clock.c # Begin Source File SOURCE=.\my_compress.c - -!IF "$(CFG)" == "mysys - Win32 Release" - -# ADD CPP /I "../zlib" - -!ELSEIF "$(CFG)" == "mysys - Win32 Debug" - -# ADD CPP /I "../zlib" - -!ELSEIF "$(CFG)" == "mysys - Win32 Max" - -!ENDIF - # End Source File # Begin Source File diff --git a/VC++Files/prepare b/VC++Files/prepare new file mode 100755 index 00000000000..e0dff9e04c0 --- /dev/null +++ b/VC++Files/prepare @@ -0,0 +1,104 @@ +#!/bin/sh + +if [ -f prepare_done ] +then + exit +fi + +cd .. +SRCDIR=`pwd` + +( +find $SRCDIR -name *.dsw -and -not -path \*SCCS\* -print +find $SRCDIR -name *.dsp -and -not -path \*SCCS\* -print +)|( +while read v +do + sed 's/$'"/`echo -e \\\r`/" $v > $v.tmp + rm $v + mv $v.tmp $v +done +) + +ln -s $SRCDIR/include $SRCDIR/VC++Files/include + +link_dir_files() +{ + for arg do + + cd $SRCDIR/$arg/ + ( + ls -A1|grep \\.[ch]$ + ls -A1|grep \\.ih$ + ls -A1|grep \\.asm$ + )|( + while read v + do + ln -s $SRCDIR/$arg/$v $SRCDIR/VC++Files/$arg/$v + done + ) + + cd $SRCDIR/$arg/ + (ls -A1|grep \\.cc$|sed 's/.cc$//g')|( + while read v + do + ln -s $SRCDIR/$arg/$v.cc $SRCDIR/VC++Files/$arg/$v.cpp + done + ) + + done +} + +link_dir_dirs() +{ + for arg do + + cd $SRCDIR/$arg/ + ( + ls -l |grep "^d"|awk '{print($9)}' - + )|( + while read v + do + ln -s $SRCDIR/$arg/$v $SRCDIR/VC++Files/$arg/ + done + ) + + done +} + +link_dir_files 'heap' +link_dir_files 'isam' +link_dir_files 'merge' +link_dir_files 'mysys' +link_dir_files 'zlib' +link_dir_files 'regex' +link_dir_files 'strings' +link_dir_files 'dbug' +link_dir_files 'vio' +link_dir_files 'client' +link_dir_files 'libmysql' +link_dir_files 'extra' +link_dir_files 'myisam' +link_dir_files 'myisammrg' +link_dir_files 'innobase' +link_dir_files 'bdb' +link_dir_files 'sql' +link_dir_files 'bdb/build_win32' +link_dir_files 'libmysqld' + +link_dir_dirs 'bdb' +link_dir_dirs 'innobase' + +ln -s $SRCDIR/myisam/myisampack.c $SRCDIR/VC++Files/myisampack/ +ln -s $SRCDIR/client/mysqlbinlog.cc $SRCDIR/VC++Files/mysqlbinlog/mysqlbinlog.cpp +ln -s $SRCDIR/isam/pack_isam.c $SRCDIR/VC++Files/pack_isam/pack_isam.c + +echo '/* added for win : */' >> $SRCDIR/config.h +echo '#undef HAVE_SCHED_H' >> $SRCDIR/config.h +echo '#USE_QUERY_CACHE_INTEGRITY_CHECK 1' >> $SRCDIR/config.h + +echo '/* added for win : */' >> $SRCDIR/innobase/ib_config.h +echo '#undef HAVE_SCHED_H' >> $SRCDIR/innobase/ib_config.h + +cd $SRCDIR/VC++Files +echo '1' > prepare_done
\ No newline at end of file diff --git a/VC++Files/test1/mysql_thr.c b/VC++Files/test1/mysql_thr.c new file mode 100644 index 00000000000..fac5c37a9af --- /dev/null +++ b/VC++Files/test1/mysql_thr.c @@ -0,0 +1,255 @@ +/* Testing of connecting to MySQL from X threads */
+
+#include <windows.h>
+#include <process.h>
+#include <stdio.h>
+#include <mysql.h>
+#include <errno.h>
+
+#define TEST_COUNT 20
+
+/*****************************************************************************
+** The following is to emulate the posix thread interface
+*****************************************************************************/
+
+typedef HANDLE pthread_t;
+typedef struct thread_attr {
+ DWORD dwStackSize ;
+ DWORD dwCreatingFlag ;
+ int priority ;
+} pthread_attr_t ;
+
+typedef struct { int dummy; } pthread_condattr_t;
+typedef unsigned int uint;
+
+typedef struct {
+ uint waiting;
+ HANDLE semaphore;
+} pthread_cond_t;
+
+typedef CRITICAL_SECTION pthread_mutex_t;
+
+#define pthread_mutex_init(A,B) InitializeCriticalSection(A)
+#define pthread_mutex_lock(A) (EnterCriticalSection(A),0)
+#define pthread_mutex_unlock(A) LeaveCriticalSection(A)
+#define pthread_mutex_destroy(A) DeleteCriticalSection(A)
+#define pthread_handler_decl(A,B) unsigned __cdecl A(void *B)
+typedef unsigned (__cdecl *pthread_handler)(void *);
+#define pthread_self() GetCurrentThread()
+
+static unsigned int thread_count;
+static pthread_cond_t COND_thread_count;
+static pthread_mutex_t LOCK_thread_count;
+
+pthread_mutex_t THR_LOCK_malloc,THR_LOCK_open,THR_LOCK_keycache,
+ THR_LOCK_lock,THR_LOCK_isam;
+
+/*
+** We have tried to use '_beginthreadex' instead of '_beginthread' here
+** but in this case the program leaks about 512 characters for each
+** created thread !
+*/
+
+int pthread_create(pthread_t *thread_id, pthread_attr_t *attr,
+ pthread_handler func, void *param)
+{
+ HANDLE hThread;
+
+ hThread=(HANDLE)_beginthread(func,
+ attr->dwStackSize ? attr->dwStackSize :
+ 65535,param);
+ if ((long) hThread == -1L)
+ {
+ return(errno ? errno : -1);
+ }
+ *thread_id=hThread;
+ return(0);
+}
+
+void pthread_exit(unsigned A)
+{
+ _endthread();
+}
+
+/*
+** The following simple implementation of conds works as long as
+** only one thread uses pthread_cond_wait at a time.
+** This is coded very carefully to work with thr_lock.
+*/
+
+/*****************************************************************************
+** The following is a simple implementation of posix conditions
+*****************************************************************************/
+
+int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr)
+{
+ cond->waiting=0;
+ cond->semaphore=CreateSemaphore(NULL,0,0x7FFFFFFF,(char*) 0);
+ if (!cond->semaphore)
+ return ENOMEM;
+ return 0;
+}
+
+int pthread_cond_destroy(pthread_cond_t *cond)
+{
+ return CloseHandle(cond->semaphore) ? 0 : EINVAL;
+}
+
+int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
+{
+ InterlockedIncrement(&cond->waiting);
+ LeaveCriticalSection(mutex);
+ WaitForSingleObject(cond->semaphore,INFINITE);
+ InterlockedDecrement(&cond->waiting);
+ EnterCriticalSection(mutex);
+ return 0 ;
+}
+
+int pthread_cond_signal(pthread_cond_t *cond)
+{
+ long prev_count;
+ if (cond->waiting)
+ ReleaseSemaphore(cond->semaphore,1,&prev_count);
+ return 0;
+}
+
+int pthread_attr_init(pthread_attr_t *connect_att)
+{
+ connect_att->dwStackSize = 0;
+ connect_att->dwCreatingFlag = 0;
+ connect_att->priority = 0;
+ return 0;
+}
+
+int pthread_attr_setstacksize(pthread_attr_t *connect_att,DWORD stack)
+{
+ connect_att->dwStackSize=stack;
+ return 0;
+}
+
+int pthread_attr_setprio(pthread_attr_t *connect_att,int priority)
+{
+ connect_att->priority=priority;
+ return 0;
+}
+
+int pthread_attr_destroy(pthread_attr_t *connect_att)
+{
+ return 0;
+}
+
+/* from my_pthread.c */
+
+#ifndef REMOVE_BUG
+
+__declspec(thread) int THR_KEY_my_errno;
+
+int _my_errno(void)
+{
+ return THR_KEY_my_errno;
+}
+#endif
+
+
+/*****************************************************************************
+** The test program
+*****************************************************************************/
+
+pthread_handler_decl(test_thread,arg)
+{
+ MYSQL mysql;
+ MYSQL_RES *res;
+
+ mysql_init(&mysql);
+ if (!mysql_real_connect(&mysql,NULL,0,0,NULL,0,NULL,0))
+ {
+ fprintf(stderr,"Couldn't connect to engine!\n%s\n\n",mysql_error(&mysql));
+ perror("");
+ goto end;
+ }
+ if (mysql_query(&mysql,"select 1") < 0)
+ {
+ fprintf(stderr,"Query failed (%s)\n",mysql_error(&mysql));
+ goto end;
+ }
+ if (!(res=mysql_store_result(&mysql)))
+ {
+ fprintf(stderr,"Couldn't get result from query failed\n",
+ mysql_error(&mysql));
+ goto end;
+ }
+ mysql_free_result(res);
+
+end:
+
+ Sleep(1000); /* Win32 sleep */
+ mysql_close(&mysql);
+
+ pthread_mutex_lock(&LOCK_thread_count);
+ thread_count--;
+ pthread_cond_signal(&COND_thread_count); /* Tell main we are ready */
+ pthread_mutex_unlock(&LOCK_thread_count);
+ pthread_exit(0);
+ return 0;
+}
+
+int main(int argc,char **argv)
+{
+ pthread_t tid;
+ pthread_attr_t thr_attr;
+ int i,error;
+
+ if ((error=pthread_cond_init(&COND_thread_count,NULL)))
+ {
+ fprintf(stderr,"Got error: %d from pthread_cond_init (errno: %d)",
+ error,errno);
+ exit(1);
+ }
+ pthread_mutex_init(&LOCK_thread_count,NULL);
+ if ((error=pthread_attr_init(&thr_attr)))
+ {
+ fprintf(stderr,"Got error: %d from pthread_attr_init (errno: %d)",
+ error,errno);
+ exit(1);
+ }
+ if ((error=pthread_attr_setstacksize(&thr_attr,65536L)))
+ {
+ fprintf(stderr,"Got error: %d from pthread_attr_setstacksize (errno: %d)",
+ error,errno);
+ exit(1);
+ }
+
+ printf("Init ok. Creating %d threads\n",TEST_COUNT);
+
+ for (i=1 ; i <= TEST_COUNT ; i++)
+ {
+ int *param= &i;
+ if ((error=pthread_mutex_lock(&LOCK_thread_count)))
+ {
+ fprintf(stderr,"\nGot error: %d from pthread_mutex_lock (errno: %d)",
+ error,errno);
+ exit(1);
+ }
+ if ((error=pthread_create(&tid,&thr_attr,test_thread,(void*) param)))
+ {
+ fprintf(stderr,"\nGot error: %d from pthread_create (errno: %d)\n",
+ error,errno);
+ pthread_mutex_unlock(&LOCK_thread_count);
+ exit(1);
+ }
+ thread_count++;
+ pthread_mutex_unlock(&LOCK_thread_count);
+ }
+
+ if ((error=pthread_mutex_lock(&LOCK_thread_count)))
+ fprintf(stderr,"\nGot error: %d from pthread_mutex_lock\n",error);
+ while (thread_count)
+ {
+ if ((error=pthread_cond_wait(&COND_thread_count,&LOCK_thread_count)))
+ fprintf(stderr,"\nGot error: %d from pthread_cond_wait\n",error);
+ }
+ pthread_mutex_unlock(&LOCK_thread_count);
+ pthread_attr_destroy(&thr_attr);
+ printf("\nend\n");
+ return 0;
+}
diff --git a/VC++Files/thr_test/thr_test.c b/VC++Files/thr_test/thr_test.c new file mode 100644 index 00000000000..d66b24bc0fc --- /dev/null +++ b/VC++Files/thr_test/thr_test.c @@ -0,0 +1,250 @@ +/* Testing of thread creation to find memory allocation bug
+** This is coded to use as few extern functions as possible!
+**
+** The program must be compiled to be multithreaded !
+**
+** The problem is that when this program is run it will allocate more and more
+** memory, so there is a memory leak in the thread handling. The problem is how
+** to avoid is !
+**
+** It looks like the bug is that the std library doesn't free thread
+** specific variables if one uses a thread variable.
+** If one compiles this program with -DREMOVE_BUG
+** there is no memory leaks anymore!
+**
+** This program is tested with Microsofts VC++ 5.0, but BC5.2 is also
+** reported to have this bug.
+*/
+
+#include <windows.h>
+#include <process.h>
+#include <stdio.h>
+
+#define TEST_COUNT 100000
+
+/*****************************************************************************
+** The following is to emulate the posix thread interface
+*****************************************************************************/
+
+typedef HANDLE pthread_t;
+typedef struct thread_attr {
+ DWORD dwStackSize ;
+ DWORD dwCreatingFlag ;
+ int priority ;
+} pthread_attr_t ;
+typedef struct { int dummy; } pthread_condattr_t;
+typedef struct {
+ unsigned int msg;
+ pthread_t thread;
+ DWORD thread_id;
+} pthread_cond_t;
+typedef CRITICAL_SECTION pthread_mutex_t;
+
+#define pthread_mutex_init(A,B) InitializeCriticalSection(A)
+#define pthread_mutex_lock(A) (EnterCriticalSection(A),0)
+#define pthread_mutex_unlock(A) LeaveCriticalSection(A)
+#define pthread_mutex_destroy(A) DeleteCriticalSection(A)
+#define pthread_handler_decl(A,B) unsigned __cdecl A(void *B)
+typedef unsigned (__cdecl *pthread_handler)(void *);
+#define pthread_self() GetCurrentThread()
+
+static unsigned int thread_count;
+static pthread_cond_t COND_thread_count;
+static pthread_mutex_t LOCK_thread_count;
+
+pthread_mutex_t THR_LOCK_malloc,THR_LOCK_open,THR_LOCK_keycache,
+ THR_LOCK_lock,THR_LOCK_isam;
+/*
+** We have tried to use '_beginthreadex' instead of '_beginthread' here
+** but in this case the program leaks about 512 characters for each
+** created thread !
+*/
+
+int pthread_create(pthread_t *thread_id, pthread_attr_t *attr,
+ pthread_handler func, void *param)
+{
+ HANDLE hThread;
+
+ hThread=(HANDLE)_beginthread(func,
+ attr->dwStackSize ? attr->dwStackSize :
+ 65535,param);
+ if ((long) hThread == -1L)
+ {
+ return(errno ? errno : -1);
+ }
+ *thread_id=hThread;
+ return(0);
+}
+
+void pthread_exit(unsigned A)
+{
+ _endthread();
+}
+
+/*
+** The following simple implementation of conds works as long as
+** only one thread uses pthread_cond_wait at a time.
+** This is coded very carefully to work with thr_lock.
+*/
+
+static unsigned int WIN32_WAIT_SIGNAL= 30000; /* Start message to use */
+
+int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr)
+{
+ cond->msg=WIN32_WAIT_SIGNAL++;
+ cond->thread=(pthread_t) pthread_self(); /* For global conds */
+//IRENA
+ cond->thread_id=GetCurrentThreadId();
+ return 0;
+}
+
+
+int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
+{
+ MSG msg ;
+ unsigned int msgCode=cond->msg;
+
+ cond->thread=(pthread_t) pthread_self();
+//IRENA
+//??? cond->thread_id=GetCurrentThreadId();
+ //VOID(ReleaseMutex(*mutex));
+
+ LeaveCriticalSection(mutex);
+ do
+ {
+ WaitMessage() ;
+ if (!PeekMessage(&msg, NULL, 1, 65534,PM_REMOVE))
+ {
+ return errno=GetLastError() ;
+ }
+ } while (msg.message != msgCode) ;
+ EnterCriticalSection(mutex);
+ return 0 ;
+}
+
+
+int pthread_cond_signal(pthread_cond_t *cond)
+{
+
+ if (!PostThreadMessage(cond->thread_id, cond->msg, 0,0))
+ {
+ return errno=GetLastError() ;
+ }
+ return 0 ;
+}
+
+int pthread_attr_init(pthread_attr_t *connect_att)
+{
+ connect_att->dwStackSize = 0;
+ connect_att->dwCreatingFlag = 0;
+ connect_att->priority = 0;
+ return 0;
+}
+
+int pthread_attr_setstacksize(pthread_attr_t *connect_att,DWORD stack)
+{
+ connect_att->dwStackSize=stack;
+ return 0;
+}
+
+int pthread_attr_setprio(pthread_attr_t *connect_att,int priority)
+{
+ connect_att->priority=priority;
+ return 0;
+}
+
+int pthread_attr_destroy(pthread_attr_t *connect_att)
+{
+ return 0;
+}
+
+/* from my_pthread.c */
+
+#ifndef REMOVE_BUG
+
+__declspec(thread) int THR_KEY_my_errno;
+
+int _my_errno(void)
+{
+ return THR_KEY_my_errno;
+}
+#endif
+
+/*****************************************************************************
+** The test program
+*****************************************************************************/
+
+pthread_handler_decl(test_thread,arg)
+{
+ pthread_mutex_lock(&LOCK_thread_count);
+ thread_count--;
+ pthread_cond_signal(&COND_thread_count); /* Tell main we are ready */
+ pthread_mutex_unlock(&LOCK_thread_count);
+ pthread_exit(0);
+ return 0;
+}
+
+int main(int argc,char **argv)
+{
+ pthread_t tid;
+ pthread_attr_t thr_attr;
+ int i,error;
+
+ if ((error=pthread_cond_init(&COND_thread_count,NULL)))
+ {
+ fprintf(stderr,"Got error: %d from pthread_cond_init (errno: %d)",
+ error,errno);
+ exit(1);
+ }
+ pthread_mutex_init(&LOCK_thread_count,NULL);
+ if ((error=pthread_attr_init(&thr_attr)))
+ {
+ fprintf(stderr,"Got error: %d from pthread_attr_init (errno: %d)",
+ error,errno);
+ exit(1);
+ }
+ if ((error=pthread_attr_setstacksize(&thr_attr,65536L)))
+ {
+ fprintf(stderr,"Got error: %d from pthread_attr_setstacksize (errno: %d)",
+ error,errno);
+ exit(1);
+ }
+
+ printf("Init ok. Creating %d threads\n",TEST_COUNT);
+ for (i=1 ; i <= TEST_COUNT ; i++)
+ {
+ int *param= &i;
+ if ((i % 100) == 0)
+ {
+ printf("%8d",i);
+ fflush(stdout);
+ }
+ if ((error=pthread_mutex_lock(&LOCK_thread_count)))
+ {
+ fprintf(stderr,"\nGot error: %d from pthread_mutex_lock (errno: %d)",
+ error,errno);
+ exit(1);
+ }
+ if ((error=pthread_create(&tid,&thr_attr,test_thread,(void*) param)))
+ {
+ fprintf(stderr,"\nGot error: %d from pthread_create (errno: %d)\n",
+ error,errno);
+ pthread_mutex_unlock(&LOCK_thread_count);
+ exit(1);
+ }
+ thread_count++;
+ pthread_mutex_unlock(&LOCK_thread_count);
+
+ if ((error=pthread_mutex_lock(&LOCK_thread_count)))
+ fprintf(stderr,"\nGot error: %d from pthread_mutex_lock\n",error);
+ while (thread_count)
+ {
+ if ((error=pthread_cond_wait(&COND_thread_count,&LOCK_thread_count)))
+ fprintf(stderr,"\nGot error: %d from pthread_cond_wait\n",error);
+ }
+ pthread_mutex_unlock(&LOCK_thread_count);
+ }
+ pthread_attr_destroy(&thr_attr);
+ printf("\nend\n");
+ return 0;
+}
|