From 7311cbe7dee5980d921ec43177fd268783eb18e2 Mon Sep 17 00:00:00 2001 From: unknown <monty@hundin.mysql.fi> Date: Fri, 28 Jun 2002 17:26:11 +0300 Subject: [PATCH] Updated windows files (VC++ files and winmysqladmin). Portability fixes. Removed compiler warnings. VC++Files/client/mysql.dsp: Updated to 4.0.2 VC++Files/client/mysqladmin.dsp: Updated to 4.0.2 VC++Files/client/mysqlclient.dsp: Updated to 4.0.2 VC++Files/client/mysqldump.dsp: Updated to 4.0.2 VC++Files/client/mysqlimport.dsp: Updated to 4.0.2 VC++Files/client/mysqlshow.dsp: Updated to 4.0.2 VC++Files/innobase/innobase.dsp: Updated to 4.0.2 VC++Files/libmysql/libmySQL.dsp: Updated to 4.0.2 VC++Files/libmysqltest/myTest.dsp: Updated to 4.0.2 VC++Files/merge/merge.dsp: Updated to 4.0.2 VC++Files/myisam/myisam.dsp: Updated to 4.0.2 VC++Files/mysql.dsw: Updated to 4.0.2 VC++Files/mysqlbinlog/mysqlbinlog.dsp: Updated to 4.0.2 VC++Files/mysqlcheck/mysqlcheck.dsp: Updated to 4.0.2 VC++Files/mysqlmanager/MySqlManager.dsp: Updated to 4.0.2 VC++Files/mysys/mysys.dsp: Updated to 4.0.2 VC++Files/pack_isam/pack_isam.dsp: Updated to 4.0.2 VC++Files/perror/perror.dsp: Updated to 4.0.2 VC++Files/replace/replace.dsp: Updated to 4.0.2 VC++Files/sql/mysqld.dsp: Updated to 4.0.2 VC++Files/test1/test1.dsp: Updated to 4.0.2 VC++Files/thr_insert_test/thr_insert_test.dsp: Updated to 4.0.2 VC++Files/thr_test/thr_test.dsp: Updated to 4.0.2 VC++Files/vio/vio.dsp: Updated to 4.0.2 VC++Files/zlib/zlib.dsp: Updated to 4.0.2 include/config-win.h: Added isnan() and finite() include/myisam.h: Move thr_xxx functions to myisam_priv.h myisam/mi_check.c: Portability fix. myisam/mi_locking.c: Comment cleanup myisam/myisamchk.c: Removed compiler warning myisam/myisamdef.h: Added thr_xxx functions myisam/sort.c: Portability fix sql/field.cc: Portability fix sql/sql_insert.cc: R --- VC++Files/bdb/bdb.dsp | 707 +++++ VC++Files/client/mysql.dsp | 3 +- VC++Files/client/mysqladmin.dsp | 3 +- VC++Files/client/mysqlclient.dsp | 44 +- VC++Files/client/mysqldump.dsp | 5 +- VC++Files/client/mysqlimport.dsp | 5 +- VC++Files/client/mysqlshow.dsp | 5 +- VC++Files/innobase/innobase.dsp | 25 + VC++Files/libmysql/libmySQL.dsp | 19 +- .../libmysqld/examples/test_libmysqld.dsp | 66 + VC++Files/libmysqld/libmysqld.dsp | 405 +++ VC++Files/libmysqltest/myTest.dsp | 3 +- VC++Files/libmysqltest/mytest.c | 170 ++ VC++Files/merge/merge.dsp | 8 - VC++Files/myisam/myisam.dsp | 8 - VC++Files/mysql.dsw | 126 + VC++Files/mysqlbinlog/mysqlbinlog.dsp | 2 +- VC++Files/mysqlcheck/mysqlcheck.dsp | 8 +- VC++Files/mysqldemb/mysqldemb.dsp | 392 +++ VC++Files/mysqlmanager/MySqlManager.dsp | 3 +- VC++Files/mysqlserver/mysqlserver.dsp | 84 + VC++Files/mysqlshutdown/mysqlshutdown.c | 198 ++ VC++Files/mysqlwatch/mysqlwatch.c | 745 +++++ VC++Files/mysys/mysys.dsp | 47 +- VC++Files/pack_isam/pack_isam.dsp | 3 +- VC++Files/perror/perror.dsp | 4 +- VC++Files/replace/replace.dsp | 3 +- VC++Files/sql/mysqld.dsp | 13 +- VC++Files/test1/test1.dsp | 3 +- VC++Files/thr_insert_test/thr_insert_test.dsp | 4 +- VC++Files/thr_test/thr_test.dsp | 3 +- VC++Files/vio/vio.dsp | 2 +- VC++Files/winmysqladmin/db.cpp | 80 + VC++Files/winmysqladmin/db.h | 32 + VC++Files/winmysqladmin/images/Goahead.ico | Bin 0 -> 766 bytes VC++Files/winmysqladmin/images/HELP.ICO | Bin 0 -> 766 bytes VC++Files/winmysqladmin/images/INFO.ICO | Bin 0 -> 766 bytes VC++Files/winmysqladmin/images/Info.bmp | Bin 0 -> 644 bytes VC++Files/winmysqladmin/images/MYINI.ICO | Bin 0 -> 766 bytes VC++Files/winmysqladmin/images/Myini.bmp | Bin 0 -> 644 bytes VC++Files/winmysqladmin/images/Noentry.ico | Bin 0 -> 766 bytes VC++Files/winmysqladmin/images/SETUP.BMP | Bin 0 -> 86878 bytes VC++Files/winmysqladmin/images/Setup 16.bmp | Bin 0 -> 86880 bytes VC++Files/winmysqladmin/images/Table.ico | Bin 0 -> 1078 bytes VC++Files/winmysqladmin/images/Working.ico | Bin 0 -> 766 bytes VC++Files/winmysqladmin/images/database.ico | Bin 0 -> 1078 bytes VC++Files/winmysqladmin/images/find.ico | Bin 0 -> 766 bytes VC++Files/winmysqladmin/images/green.ico | Bin 0 -> 766 bytes VC++Files/winmysqladmin/images/help.bmp | Bin 0 -> 644 bytes VC++Files/winmysqladmin/images/initsetup.cpp | 42 + VC++Files/winmysqladmin/images/killdb.ico | Bin 0 -> 1078 bytes VC++Files/winmysqladmin/images/logo.ico | Bin 0 -> 2022 bytes VC++Files/winmysqladmin/images/multitrg.ico | Bin 0 -> 766 bytes VC++Files/winmysqladmin/images/mysql-07.bmp | Bin 0 -> 9618 bytes VC++Files/winmysqladmin/images/mysql-17.bmp | Bin 0 -> 3806 bytes VC++Files/winmysqladmin/images/mysql.BMP | Bin 0 -> 8760 bytes VC++Files/winmysqladmin/images/red.ico | Bin 0 -> 766 bytes VC++Files/winmysqladmin/images/red22.BMP | Bin 0 -> 2104 bytes VC++Files/winmysqladmin/images/see.bmp | Bin 0 -> 644 bytes VC++Files/winmysqladmin/initsetup.cpp | 40 + VC++Files/winmysqladmin/initsetup.h | 38 + VC++Files/winmysqladmin/main.cpp | 2529 +++++++++++++++++ VC++Files/winmysqladmin/main.h | 314 ++ VC++Files/winmysqladmin/mysql.h | 293 ++ VC++Files/winmysqladmin/mysql_com.h | 242 ++ VC++Files/winmysqladmin/mysql_version.h | 20 + VC++Files/winmysqladmin/winmysqladmin.cpp | 38 + VC++Files/zlib/zlib.dsp | 3 +- include/config-win.h | 67 +- include/myisam.h | 5 +- myisam/mi_check.c | 12 +- myisam/mi_locking.c | 2 +- myisam/myisamchk.c | 2 +- myisam/myisamdef.h | 4 + myisam/sort.c | 7 +- sql/field.cc | 4 +- sql/sql_insert.cc | 2 + 77 files changed, 6753 insertions(+), 139 deletions(-) create mode 100644 VC++Files/bdb/bdb.dsp create mode 100644 VC++Files/libmysqld/examples/test_libmysqld.dsp create mode 100644 VC++Files/libmysqld/libmysqld.dsp create mode 100644 VC++Files/libmysqltest/mytest.c create mode 100644 VC++Files/mysqldemb/mysqldemb.dsp create mode 100644 VC++Files/mysqlserver/mysqlserver.dsp create mode 100644 VC++Files/mysqlshutdown/mysqlshutdown.c create mode 100644 VC++Files/mysqlwatch/mysqlwatch.c create mode 100644 VC++Files/winmysqladmin/db.cpp create mode 100644 VC++Files/winmysqladmin/db.h create mode 100644 VC++Files/winmysqladmin/images/Goahead.ico create mode 100644 VC++Files/winmysqladmin/images/HELP.ICO create mode 100644 VC++Files/winmysqladmin/images/INFO.ICO create mode 100644 VC++Files/winmysqladmin/images/Info.bmp create mode 100644 VC++Files/winmysqladmin/images/MYINI.ICO create mode 100644 VC++Files/winmysqladmin/images/Myini.bmp create mode 100644 VC++Files/winmysqladmin/images/Noentry.ico create mode 100644 VC++Files/winmysqladmin/images/SETUP.BMP create mode 100644 VC++Files/winmysqladmin/images/Setup 16.bmp create mode 100644 VC++Files/winmysqladmin/images/Table.ico create mode 100644 VC++Files/winmysqladmin/images/Working.ico create mode 100644 VC++Files/winmysqladmin/images/database.ico create mode 100644 VC++Files/winmysqladmin/images/find.ico create mode 100644 VC++Files/winmysqladmin/images/green.ico create mode 100644 VC++Files/winmysqladmin/images/help.bmp create mode 100644 VC++Files/winmysqladmin/images/initsetup.cpp create mode 100644 VC++Files/winmysqladmin/images/killdb.ico create mode 100644 VC++Files/winmysqladmin/images/logo.ico create mode 100644 VC++Files/winmysqladmin/images/multitrg.ico create mode 100644 VC++Files/winmysqladmin/images/mysql-07.bmp create mode 100644 VC++Files/winmysqladmin/images/mysql-17.bmp create mode 100644 VC++Files/winmysqladmin/images/mysql.BMP create mode 100644 VC++Files/winmysqladmin/images/red.ico create mode 100644 VC++Files/winmysqladmin/images/red22.BMP create mode 100644 VC++Files/winmysqladmin/images/see.bmp create mode 100644 VC++Files/winmysqladmin/initsetup.cpp create mode 100644 VC++Files/winmysqladmin/initsetup.h create mode 100644 VC++Files/winmysqladmin/main.cpp create mode 100644 VC++Files/winmysqladmin/main.h create mode 100644 VC++Files/winmysqladmin/mysql.h create mode 100644 VC++Files/winmysqladmin/mysql_com.h create mode 100644 VC++Files/winmysqladmin/mysql_version.h create mode 100644 VC++Files/winmysqladmin/winmysqladmin.cpp diff --git a/VC++Files/bdb/bdb.dsp b/VC++Files/bdb/bdb.dsp new file mode 100644 index 00000000000..bed306fc3d0 --- /dev/null +++ b/VC++Files/bdb/bdb.dsp @@ -0,0 +1,707 @@ +# Microsoft Developer Studio Project File - Name="bdb" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=bdb - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "bdb.mak". +!MESSAGE +!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 "bdb.mak" CFG="bdb - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "bdb - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE "bdb - Win32 Max" (based on "Win32 (x86) Static Library") +!MESSAGE "bdb - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "bdb - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /G6 /MTd /W3 /Z7 /Od /Gf /I "../bdb/build_win32" /I "../bdb/include" /D "__WIN32__" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_WINDOWS" /FD /c +# SUBTRACT CPP /Fr +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\lib_debug\bdb.lib" + +!ELSEIF "$(CFG)" == "bdb - Win32 Max" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "bdb___Win32_Max" +# PROP BASE Intermediate_Dir "bdb___Win32_Max" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "bdb___Win32_Max" +# PROP Intermediate_Dir "bdb___Win32_Max" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /G6 /MTd /W3 /Z7 /Od /Gf /I "../bdb/build_win32" /I "../bdb/include" /D "__WIN32__" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_WINDOWS" /FD /c +# SUBTRACT BASE CPP /Fr +# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../bdb/build_win32" /I "../bdb/include" /D "NDEBUG" /D "DBUG_OFF" /D "_WINDOWS" /Fo"mysys___Win32_Max/" /Fd"mysys___Win32_Max/" /FD /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo /out:"..\lib_debug\bdb.lib" +# ADD LIB32 /nologo /out:"..\lib_release\bdb.lib" + +!ELSEIF "$(CFG)" == "bdb - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "bdb___Win32_Release" +# PROP BASE Intermediate_Dir "bdb___Win32_Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "bdb___Win32_Release" +# PROP Intermediate_Dir "bdb___Win32_Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /G6 /MT /W3 /O2 /I "../bdb/build_win32" /I "../bdb/include" /D "NDEBUG" /D "DBUG_OFF" /D "_WINDOWS" /Fo"mysys___Win32_Max/" /Fd"mysys___Win32_Max/" /FD /c +# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../bdb/build_win32" /I "../bdb/include" /D "NDEBUG" /D "DBUG_OFF" /D "_WINDOWS" /Fo"mysys___Win32_Max/" /Fd"mysys___Win32_Max/" /FD /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo /out:"..\lib_release\bdb.lib" +# ADD LIB32 /nologo /out:"..\lib_release\bdb.lib" + +!ENDIF + +# Begin Target + +# Name "bdb - Win32 Debug" +# Name "bdb - Win32 Max" +# Name "bdb - Win32 Release" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\btree\bt_compare.c +# End Source File +# Begin Source File + +SOURCE=.\btree\bt_conv.c +# End Source File +# Begin Source File + +SOURCE=.\btree\bt_curadj.c +# End Source File +# Begin Source File + +SOURCE=.\btree\bt_cursor.c +# End Source File +# Begin Source File + +SOURCE=.\btree\bt_delete.c +# End Source File +# Begin Source File + +SOURCE=.\btree\bt_method.c +# End Source File +# Begin Source File + +SOURCE=.\btree\bt_open.c +# End Source File +# Begin Source File + +SOURCE=.\btree\bt_put.c +# End Source File +# Begin Source File + +SOURCE=.\btree\bt_rec.c +# End Source File +# Begin Source File + +SOURCE=.\btree\bt_reclaim.c +# End Source File +# Begin Source File + +SOURCE=.\btree\bt_recno.c +# End Source File +# Begin Source File + +SOURCE=.\btree\bt_rsearch.c +# End Source File +# Begin Source File + +SOURCE=.\btree\bt_search.c +# End Source File +# Begin Source File + +SOURCE=.\btree\bt_split.c +# End Source File +# Begin Source File + +SOURCE=.\btree\bt_stat.c +# End Source File +# Begin Source File + +SOURCE=.\btree\bt_upgrade.c +# End Source File +# Begin Source File + +SOURCE=.\btree\bt_verify.c +# End Source File +# Begin Source File + +SOURCE=.\btree\btree_auto.c +# End Source File +# Begin Source File + +SOURCE=.\db\crdel_auto.c +# End Source File +# Begin Source File + +SOURCE=.\db\crdel_rec.c +# End Source File +# Begin Source File + +SOURCE=.\cxx\cxx_app.cpp +# End Source File +# Begin Source File + +SOURCE=.\cxx\cxx_except.cpp +# End Source File +# Begin Source File + +SOURCE=.\cxx\cxx_lock.cpp +# End Source File +# Begin Source File + +SOURCE=.\cxx\cxx_log.cpp +# End Source File +# Begin Source File + +SOURCE=.\cxx\cxx_mpool.cpp +# End Source File +# Begin Source File + +SOURCE=.\cxx\cxx_table.cpp +# End Source File +# Begin Source File + +SOURCE=.\cxx\cxx_txn.cpp +# End Source File +# Begin Source File + +SOURCE=.\db\db.c +# End Source File +# Begin Source File + +SOURCE=.\db\db_am.c +# End Source File +# Begin Source File + +SOURCE=.\db\db_auto.c +# End Source File +# Begin Source File + +SOURCE=.\common\db_byteorder.c +# End Source File +# Begin Source File + +SOURCE=.\db\db_cam.c +# End Source File +# Begin Source File + +SOURCE=.\db\db_conv.c +# End Source File +# Begin Source File + +SOURCE=.\db\db_dispatch.c +# End Source File +# Begin Source File + +SOURCE=.\db\db_dup.c +# End Source File +# Begin Source File + +SOURCE=.\common\db_err.c +# End Source File +# Begin Source File + +SOURCE=.\common\db_getlong.c +# End Source File +# Begin Source File + +SOURCE=.\db\db_iface.c +# End Source File +# Begin Source File + +SOURCE=.\db\db_join.c +# End Source File +# Begin Source File + +SOURCE=.\common\db_log2.c +# End Source File +# Begin Source File + +SOURCE=.\db\db_meta.c +# End Source File +# Begin Source File + +SOURCE=.\db\db_method.c +# End Source File +# Begin Source File + +SOURCE=.\db\db_overflow.c +# End Source File +# Begin Source File + +SOURCE=.\db\db_pr.c +# End Source File +# Begin Source File + +SOURCE=.\db\db_rec.c +# End Source File +# Begin Source File + +SOURCE=.\db\db_reclaim.c +# End Source File +# Begin Source File + +SOURCE=.\db\db_ret.c +# End Source File +# Begin Source File + +SOURCE=.\env\db_salloc.c +# End Source File +# Begin Source File + +SOURCE=.\env\db_shash.c +# End Source File +# Begin Source File + +SOURCE=.\db\db_upg.c +# End Source File +# Begin Source File + +SOURCE=.\db\db_upg_opd.c +# End Source File +# Begin Source File + +SOURCE=.\db\db_vrfy.c +# End Source File +# Begin Source File + +SOURCE=.\db\db_vrfyutil.c +# End Source File +# Begin Source File + +SOURCE=.\dbm\dbm.c +# End Source File +# Begin Source File + +SOURCE=.\env\env_method.c +# End Source File +# Begin Source File + +SOURCE=.\env\env_open.c +# End Source File +# Begin Source File + +SOURCE=.\env\env_recover.c +# End Source File +# Begin Source File + +SOURCE=.\env\env_region.c +# End Source File +# Begin Source File + +SOURCE=.\hash\hash.c +# End Source File +# Begin Source File + +SOURCE=.\hash\hash_auto.c +# End Source File +# Begin Source File + +SOURCE=.\hash\hash_conv.c +# End Source File +# Begin Source File + +SOURCE=.\hash\hash_dup.c +# End Source File +# Begin Source File + +SOURCE=.\hash\hash_func.c +# End Source File +# Begin Source File + +SOURCE=.\hash\hash_meta.c +# End Source File +# Begin Source File + +SOURCE=.\hash\hash_method.c +# End Source File +# Begin Source File + +SOURCE=.\hash\hash_page.c +# End Source File +# Begin Source File + +SOURCE=.\hash\hash_rec.c +# End Source File +# Begin Source File + +SOURCE=.\hash\hash_reclaim.c +# End Source File +# Begin Source File + +SOURCE=.\hash\hash_stat.c +# End Source File +# Begin Source File + +SOURCE=.\hash\hash_upgrade.c +# End Source File +# Begin Source File + +SOURCE=.\hash\hash_verify.c +# End Source File +# Begin Source File + +SOURCE=.\hsearch\hsearch.c +# End Source File +# Begin Source File + +SOURCE=.\lock\lock.c +# End Source File +# Begin Source File + +SOURCE=.\lock\lock_conflict.c +# End Source File +# Begin Source File + +SOURCE=.\lock\lock_deadlock.c +# End Source File +# Begin Source File + +SOURCE=.\lock\lock_method.c +# End Source File +# Begin Source File + +SOURCE=.\lock\lock_region.c +# End Source File +# Begin Source File + +SOURCE=.\lock\lock_stat.c +# End Source File +# Begin Source File + +SOURCE=.\lock\lock_util.c +# End Source File +# Begin Source File + +SOURCE=.\log\log.c +# End Source File +# Begin Source File + +SOURCE=.\log\log_archive.c +# End Source File +# Begin Source File + +SOURCE=.\log\log_auto.c +# End Source File +# Begin Source File + +SOURCE=.\log\log_compare.c +# End Source File +# Begin Source File + +SOURCE=.\log\log_findckp.c +# End Source File +# Begin Source File + +SOURCE=.\log\log_get.c +# End Source File +# Begin Source File + +SOURCE=.\log\log_method.c +# End Source File +# Begin Source File + +SOURCE=.\log\log_put.c +# End Source File +# Begin Source File + +SOURCE=.\log\log_rec.c +# End Source File +# Begin Source File + +SOURCE=.\log\log_register.c +# End Source File +# Begin Source File + +SOURCE=.\mp\mp_alloc.c +# End Source File +# Begin Source File + +SOURCE=.\mp\mp_bh.c +# End Source File +# Begin Source File + +SOURCE=.\mp\mp_fget.c +# End Source File +# Begin Source File + +SOURCE=.\mp\mp_fopen.c +# End Source File +# Begin Source File + +SOURCE=.\mp\mp_fput.c +# End Source File +# Begin Source File + +SOURCE=.\mp\mp_fset.c +# End Source File +# Begin Source File + +SOURCE=.\mp\mp_method.c +# End Source File +# Begin Source File + +SOURCE=.\mp\mp_region.c +# End Source File +# Begin Source File + +SOURCE=.\mp\mp_register.c +# End Source File +# Begin Source File + +SOURCE=.\mp\mp_stat.c +# End Source File +# Begin Source File + +SOURCE=.\mp\mp_sync.c +# End Source File +# Begin Source File + +SOURCE=.\mp\mp_trickle.c +# End Source File +# Begin Source File + +SOURCE=.\mutex\mut_tas.c +# End Source File +# Begin Source File + +SOURCE=.\mutex\mutex.c +# End Source File +# Begin Source File + +SOURCE=.\os_win32\os_abs.c +# End Source File +# Begin Source File + +SOURCE=.\os\os_alloc.c +# End Source File +# Begin Source File + +SOURCE=.\os_win32\os_dir.c +# End Source File +# Begin Source File + +SOURCE=.\os_win32\os_errno.c +# End Source File +# Begin Source File + +SOURCE=.\os_win32\os_fid.c +# End Source File +# Begin Source File + +SOURCE=.\os_win32\os_finit.c +# End Source File +# Begin Source File + +SOURCE=.\os\os_fsync.c +# End Source File +# Begin Source File + +SOURCE=.\os\os_handle.c +# End Source File +# Begin Source File + +SOURCE=.\os_win32\os_map.c +# End Source File +# Begin Source File + +SOURCE=.\os\os_method.c +# End Source File +# Begin Source File + +SOURCE=.\os\os_oflags.c +# End Source File +# Begin Source File + +SOURCE=.\os_win32\os_open.c +# End Source File +# Begin Source File + +SOURCE=.\os\os_region.c +# End Source File +# Begin Source File + +SOURCE=.\os_win32\os_rename.c +# End Source File +# Begin Source File + +SOURCE=.\os\os_root.c +# End Source File +# Begin Source File + +SOURCE=.\os\os_rpath.c +# End Source File +# Begin Source File + +SOURCE=.\os\os_rw.c +# End Source File +# Begin Source File + +SOURCE=.\os_win32\os_seek.c +# End Source File +# Begin Source File + +SOURCE=.\os_win32\os_sleep.c +# End Source File +# Begin Source File + +SOURCE=.\os_win32\os_spin.c +# End Source File +# Begin Source File + +SOURCE=.\os\os_stat.c +# End Source File +# Begin Source File + +SOURCE=.\os\os_tmpdir.c +# End Source File +# Begin Source File + +SOURCE=.\os_win32\os_type.c +# End Source File +# Begin Source File + +SOURCE=.\os\os_unlink.c +# End Source File +# Begin Source File + +SOURCE=.\qam\qam.c +# End Source File +# Begin Source File + +SOURCE=.\qam\qam_auto.c +# End Source File +# Begin Source File + +SOURCE=.\qam\qam_conv.c +# End Source File +# Begin Source File + +SOURCE=.\qam\qam_files.c +# End Source File +# Begin Source File + +SOURCE=.\qam\qam_method.c +# End Source File +# Begin Source File + +SOURCE=.\qam\qam_open.c +# End Source File +# Begin Source File + +SOURCE=.\qam\qam_rec.c +# End Source File +# Begin Source File + +SOURCE=.\qam\qam_stat.c +# End Source File +# Begin Source File + +SOURCE=.\qam\qam_upgrade.c +# End Source File +# Begin Source File + +SOURCE=.\qam\qam_verify.c +# End Source File +# Begin Source File + +SOURCE=.\clib\strcasecmp.c +# End Source File +# Begin Source File + +SOURCE=.\txn\txn.c +# End Source File +# Begin Source File + +SOURCE=.\txn\txn_auto.c +# End Source File +# Begin Source File + +SOURCE=.\txn\txn_rec.c +# End Source File +# Begin Source File + +SOURCE=.\txn\txn_region.c +# End Source File +# Begin Source File + +SOURCE=.\common\util_log.c +# End Source File +# Begin Source File + +SOURCE=.\common\util_sig.c +# End Source File +# Begin Source File + +SOURCE=.\xa\xa.c +# End Source File +# Begin Source File + +SOURCE=.\xa\xa_db.c +# End Source File +# Begin Source File + +SOURCE=.\xa\xa_map.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# End Target +# End Project diff --git a/VC++Files/client/mysql.dsp b/VC++Files/client/mysql.dsp index 1cefdd2b67b..4c9819bacde 100644 --- a/VC++Files/client/mysql.dsp +++ b/VC++Files/client/mysql.dsp @@ -68,8 +68,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 /c -# ADD CPP /nologo /G6 /MTd /W3 /Gm /ZI /Od /I "../include" /I "../" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c -# SUBTRACT CPP /YX +# ADD CPP /nologo /G6 /MTd /W3 /Gm /Zi /Od /I "../include" /I "../" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe diff --git a/VC++Files/client/mysqladmin.dsp b/VC++Files/client/mysqladmin.dsp index 82794da57cb..278bcdae8b0 100644 --- a/VC++Files/client/mysqladmin.dsp +++ b/VC++Files/client/mysqladmin.dsp @@ -67,8 +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 /c -# ADD CPP /nologo /G6 /MTd /W3 /Gm /ZI /Od /I "../include" /I "../" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c -# SUBTRACT CPP /YX +# ADD CPP /nologo /G6 /MTd /W3 /Gm /Zi /Od /I "../include" /I "../" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe diff --git a/VC++Files/client/mysqlclient.dsp b/VC++Files/client/mysqlclient.dsp index 376febc6d36..5e3fbcd060e 100644 --- a/VC++Files/client/mysqlclient.dsp +++ b/VC++Files/client/mysqlclient.dsp @@ -65,8 +65,7 @@ LIB32=link.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" /I "../" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_WINDOWS" /D "USE_TLS" /FD /c -# SUBTRACT CPP /YX +# ADD CPP /nologo /G6 /MTd /W3 /Zi /Od /I "../include" /I "../" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_WINDOWS" /D "USE_TLS" /FD /c # ADD BASE RSC /l 0x409 # ADD RSC /l 0x409 BSC32=bscmake.exe @@ -172,18 +171,6 @@ SOURCE=..\libmysql\get_password.c # End Source File # Begin Source File -SOURCE=..\mysys\getopt.c -# End Source File -# Begin Source File - -SOURCE=..\mysys\getopt1.c -# End Source File -# Begin Source File - -SOURCE=..\mysys\getvar.c -# End Source File -# Begin Source File - SOURCE=..\strings\int2str.c # End Source File # Begin Source File @@ -232,6 +219,19 @@ SOURCE=..\mysys\mf_iocache.c # End Source File # Begin Source File +SOURCE=..\mysys\mf_iocache2.c + +!IF "$(CFG)" == "mysqlclient - Win32 Release" + +!ELSEIF "$(CFG)" == "mysqlclient - Win32 Debug" + +# ADD CPP /Od + +!ENDIF + +# End Source File +# Begin Source File + SOURCE=..\mysys\mf_loadpath.c # End Source File # Begin Source File @@ -292,6 +292,14 @@ SOURCE=..\mysys\my_fstream.c # End Source File # Begin Source File +SOURCE=..\mysys\my_gethostbyname.c +# End Source File +# Begin Source File + +SOURCE=..\mysys\my_getopt.c +# End Source File +# Begin Source File + SOURCE=..\mysys\my_getwd.c # End Source File # Begin Source File @@ -368,6 +376,10 @@ SOURCE=..\mysys\my_thr_init.c # End Source File # Begin Source File +SOURCE=..\mysys\my_vsnprintf.c +# End Source File +# Begin Source File + SOURCE=..\mysys\my_wincond.c # End Source File # Begin Source File @@ -468,6 +480,10 @@ SOURCE=..\strings\strxmov.c # End Source File # Begin Source File +SOURCE=..\strings\strxnmov.c +# End Source File +# Begin Source File + SOURCE=..\mysys\thr_mutex.c # End Source File # Begin Source File diff --git a/VC++Files/client/mysqldump.dsp b/VC++Files/client/mysqldump.dsp index dcf1c1435a6..448ba126153 100644 --- a/VC++Files/client/mysqldump.dsp +++ b/VC++Files/client/mysqldump.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 /GX- /O2 /I "../include" /I "../" /D "NDEBUG" /D "DBUG_OFF" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c +# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../" /D "NDEBUG" /D "DBUG_OFF" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" @@ -67,8 +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 /c -# ADD CPP /nologo /G6 /MTd /W3 /Gm /GX- /ZI /Od /I "../include" /I "../" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c -# SUBTRACT CPP /YX +# ADD CPP /nologo /G6 /MTd /W3 /Gm /Zi /Od /I "../include" /I "../" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe diff --git a/VC++Files/client/mysqlimport.dsp b/VC++Files/client/mysqlimport.dsp index f10c1f90f58..5de3b68dd4e 100644 --- a/VC++Files/client/mysqlimport.dsp +++ b/VC++Files/client/mysqlimport.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 /GX- /O2 /I "../include" /I "../" /D "NDEBUG" /D "DBUG_OFF" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c +# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../" /D "NDEBUG" /D "DBUG_OFF" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" @@ -68,8 +68,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 /c -# ADD CPP /nologo /G6 /MTd /W3 /Gm /GX- /ZI /Od /I "../include" /I "../" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c -# SUBTRACT CPP /YX +# ADD CPP /nologo /G6 /MTd /W3 /Gm /Zi /Od /I "../include" /I "../" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe diff --git a/VC++Files/client/mysqlshow.dsp b/VC++Files/client/mysqlshow.dsp index dd0fc09c70f..329f128d1b6 100644 --- a/VC++Files/client/mysqlshow.dsp +++ b/VC++Files/client/mysqlshow.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 /GX- /O2 /I "../include" /I "../" /D "NDEBUG" /D "DBUG_OFF" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c +# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../" /D "NDEBUG" /D "DBUG_OFF" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" @@ -67,8 +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 /c -# ADD CPP /nologo /G6 /MTd /W3 /Gm /GX- /ZI /Od /I "../include" /I "../" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c -# SUBTRACT CPP /YX +# ADD CPP /nologo /G6 /MTd /W3 /Gm /Zi /Od /I "../include" /I "../" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe diff --git a/VC++Files/innobase/innobase.dsp b/VC++Files/innobase/innobase.dsp index 5159d513e87..c3084bfa799 100644 --- a/VC++Files/innobase/innobase.dsp +++ b/VC++Files/innobase/innobase.dsp @@ -20,6 +20,7 @@ CFG=innobase - Win32 Max !MESSAGE "innobase - Win32 Max" (based on "Win32 (x86) Static Library") !MESSAGE "innobase - Win32 Max nt" (based on "Win32 (x86) Static Library") !MESSAGE "innobase - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE "innobase - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE # Begin Project @@ -98,6 +99,29 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo /out:"..\lib_release\innobase-nt.lib" # ADD LIB32 /nologo /out:"..\lib_debug\innodb.lib" +!ELSEIF "$(CFG)" == "innobase - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "innobase___Win32_Release" +# PROP BASE Intermediate_Dir "innobase___Win32_Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "innobase___Win32_Release" +# PROP Intermediate_Dir "innobase___Win32_Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /G6 /MT /W3 /GX /O2 /I "../innobase/include" /I "../include" /D "NDEBUG" /D "_LIB" /D "_WIN32" /D "WIN32" /D "_MBCS" /D "MYSQL_SERVER" /YX /FD /c +# ADD CPP /nologo /G6 /MT /W3 /GX /O2 /I "../innobase/include" /I "../include" /D "NDEBUG" /D "_LIB" /D "_WIN32" /D "WIN32" /D "_MBCS" /D "MYSQL_SERVER" /YX /FD /c +# ADD BASE RSC /l 0x416 /d "NDEBUG" +# ADD RSC /l 0x416 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo /out:"..\lib_release\innodb.lib" +# ADD LIB32 /nologo /out:"..\lib_release\innodb.lib" + !ENDIF # Begin Target @@ -105,6 +129,7 @@ LIB32=link.exe -lib # Name "innobase - Win32 Max" # Name "innobase - Win32 Max nt" # Name "innobase - Win32 Debug" +# Name "innobase - Win32 Release" # Begin Source File SOURCE=.\btr\btr0btr.c diff --git a/VC++Files/libmysql/libmySQL.dsp b/VC++Files/libmysql/libmySQL.dsp index 9ea68943a97..14587260d60 100644 --- a/VC++Files/libmysql/libmySQL.dsp +++ b/VC++Files/libmysql/libmySQL.dsp @@ -43,7 +43,7 @@ RSC=rc.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /G6 /MT /W3 /O2 /I "." /I "..\include" /D "NDEBUG" /D "DBUG_OFF" /D "_WINDOWS" /D "USE_TLS" /FD /c +# ADD CPP /nologo /G6 /MT /W3 /O2 /I "." /I "..\include" /D "NDEBUG" /D "DBUG_OFF" /D "_WINDOWS" /D "USE_TLS" /D "USE_OLD_FUNCTIONS" /FD /c # SUBTRACT CPP /YX # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 @@ -76,8 +76,7 @@ PostBuild_Cmds=copy release\libmysql.lib ..\lib_release # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /G6 /MTd /W3 /Gm /ZI /Od /I "." /I "..\include" /D "_DEBUG" /D "_WINDOWS" /D "SAFE_MUTEX" /D "USE_TLS" /FD /c -# SUBTRACT CPP /YX +# ADD CPP /nologo /G6 /MTd /W3 /Gm /Zi /Od /I "." /I "..\include" /D "_DEBUG" /D "_WINDOWS" /D "SAFE_MUTEX" /D "USE_TLS" /D "USE_OLD_FUNCTIONS" /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" @@ -92,7 +91,7 @@ LINK32=link.exe # Begin Special Build Tool SOURCE="$(InputPath)" PostBuild_Desc=Move DLL export lib -PostBuild_Cmds=copy ..\lib_debug\libmysql.dll C:\winnt\system32 copy debug\libmysql.lib ..\lib_debug +PostBuild_Cmds=copy debug\libmysql.lib ..\lib_debug # End Special Build Tool !ENDIF @@ -283,6 +282,10 @@ SOURCE=..\mysys\my_fstream.c # End Source File # Begin Source File +SOURCE=..\mysys\my_gethostbyname.c +# End Source File +# Begin Source File + SOURCE=..\mysys\my_getwd.c # End Source File # Begin Source File @@ -351,6 +354,10 @@ SOURCE=..\mysys\my_thr_init.c # End Source File # Begin Source File +SOURCE=..\mysys\my_vsnprintf.c +# End Source File +# Begin Source File + SOURCE=..\mysys\my_wincond.c # End Source File # Begin Source File @@ -439,6 +446,10 @@ SOURCE=..\strings\strxmov.c # End Source File # Begin Source File +SOURCE=..\strings\strxnmov.c +# End Source File +# Begin Source File + SOURCE=..\mysys\thr_mutex.c # End Source File # Begin Source File diff --git a/VC++Files/libmysqld/examples/test_libmysqld.dsp b/VC++Files/libmysqld/examples/test_libmysqld.dsp new file mode 100644 index 00000000000..35d9689266d --- /dev/null +++ b/VC++Files/libmysqld/examples/test_libmysqld.dsp @@ -0,0 +1,66 @@ +# Microsoft Developer Studio Project File - Name="test_libmysqld" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=test_libmysqld - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "test_libmysqld.mak". +!MESSAGE +!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 "test_libmysqld.mak" CFG="test_libmysqld - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "test_libmysqld - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# 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 /MT /W3 /GX /O2 /I "..\..\include" /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "DBUG_OFF" /FR /YX /FD /c +# ADD BASE RSC /l 0x416 /d "NDEBUG" +# ADD RSC /l 0x416 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"LIBCMTD" /out:"Release/mysql-server.exe" +# Begin Target + +# Name "test_libmysqld - Win32 Release" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\client\mysql.cpp +# End Source File +# End Group +# Begin Source File + +SOURCE=..\..\lib_release\libmysqld.lib +# End Source File +# End Target +# End Project diff --git a/VC++Files/libmysqld/libmysqld.dsp b/VC++Files/libmysqld/libmysqld.dsp new file mode 100644 index 00000000000..34574dd4f2f --- /dev/null +++ b/VC++Files/libmysqld/libmysqld.dsp @@ -0,0 +1,405 @@ +# Microsoft Developer Studio Project File - Name="libmysqld" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=libmysqld - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "libmysqld.mak". +!MESSAGE +!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 "libmysqld.mak" CFG="libmysqld - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "libmysqld - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "libmysqld - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "libmysqld - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBMYSQLD_EXPORTS" /YX /FD /c +# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../sql" /I "../bdb/build_win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "HAVE_BERKELEY_DB" /D "USE_SYMDIR" /D "SIGNAL_WITH_VIO_CLOSE" /D "HAVE_DLOPEN" /D "EMBEDDED_LIBRARY" /D "HAVE_INNOBASE_DB" /D "DBUG_OFF" /D "USE_TLS" /FR /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x416 /d "NDEBUG" +# ADD RSC /l 0x416 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib ..\lib_release\vio.lib ..\lib_release\merge.lib ..\lib_release\myisam.lib ..\lib_release\myisammrg.lib ..\lib_release\mysys.lib ..\lib_release\strings.lib ..\lib_release\regex.lib ..\lib_release\heap.lib ..\lib_release\innodb.lib ..\lib_release\bdb.lib ..\lib_release\zlib.lib /nologo /dll /machine:I386 /out:"../lib_release/libmysqld.dll" /implib:"../lib_release/libmysqld.lib" +# SUBTRACT LINK32 /pdb:none + +!ELSEIF "$(CFG)" == "libmysqld - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "libmysqld___Win32_Debug" +# PROP BASE Intermediate_Dir "libmysqld___Win32_Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "debug" +# PROP Intermediate_Dir "debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBMYSQLD_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MT /W3 /Gm /Zi /Od /I "../include" /I "../sql" /I "../regex" /I "../bdb/build_win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "HAVE_BERKELEY_DB" /D "USE_SYMDIR" /D "SIGNAL_WITH_VIO_CLOSE" /D "HAVE_DLOPEN" /D "EMBEDDED_LIBRARY" /D "HAVE_INNOBASE_DB" /D "USE_TLS" /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x416 /d "_DEBUG" +# ADD RSC /l 0x416 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib ..\lib_debug\dbug.lib ..\lib_debug\mysys.lib ..\lib_debug\strings.lib ..\lib_debug\merge.lib ..\lib_debug\regex.lib ..\lib_debug\heap.lib ..\lib_debug\bdb.lib ..\lib_debug\innodb.lib ..\lib_debug\vio.lib /nologo /dll /debug /machine:I386 /nodefaultlib:"LIBCMTD" /out:"../lib_debug/libmysqld.dll" /implib:"../lib_debug/libmysqld.lib" /pdbtype:sept +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "libmysqld - Win32 Release" +# Name "libmysqld - Win32 Debug" +# Begin Source File + +SOURCE=..\sql\convert.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\derror.cpp +# End Source File +# Begin Source File + +SOURCE=..\libmysql\errmsg.c +# End Source File +# Begin Source File + +SOURCE=..\sql\field.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\field_conv.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\filesort.cpp +# End Source File +# Begin Source File + +SOURCE=..\libmysql\get_password.c +# End Source File +# Begin Source File + +SOURCE=..\sql\ha_berkeley.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\ha_heap.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\ha_innodb.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\ha_isammrg.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\ha_myisam.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\ha_myisammrg.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\handler.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\hash_filo.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\hostname.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\init.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\item.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\item_buff.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\item_cmpfunc.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\item_create.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\item_func.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\item_strfunc.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\item_sum.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\item_timefunc.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\item_uniq.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\key.cpp +# End Source File +# Begin Source File + +SOURCE=.\lib_load.cpp +# End Source File +# Begin Source File + +SOURCE=.\lib_sql.cpp +# End Source File +# Begin Source File + +SOURCE=.\libmysqld.c +# End Source File +# Begin Source File + +SOURCE=.\libmysqld.def +# End Source File +# Begin Source File + +SOURCE=..\sql\lock.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\log.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\log_event.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\mf_iocache.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\mini_client.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\net_pkg.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\net_serv.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\opt_ft.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\opt_range.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\opt_sum.cpp +# End Source File +# Begin Source File + +SOURCE=..\libmysql\password.c +# End Source File +# Begin Source File + +SOURCE=..\sql\procedure.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\records.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\repl_failsafe.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\slave.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_acl.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_analyse.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_base.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_cache.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_class.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_crypt.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_db.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_delete.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_do.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_handler.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_insert.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_lex.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_list.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_manager.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_map.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_parse.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_rename.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_repl.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_select.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_show.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_string.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_table.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_test.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_udf.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_union.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_update.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_yacc.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\table.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\thr_malloc.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\time.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\uniques.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\unireg.cpp +# End Source File +# End Target +# End Project diff --git a/VC++Files/libmysqltest/myTest.dsp b/VC++Files/libmysqltest/myTest.dsp index fec250e7a40..74f7b8ae48e 100644 --- a/VC++Files/libmysqltest/myTest.dsp +++ b/VC++Files/libmysqltest/myTest.dsp @@ -67,8 +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 /c -# ADD CPP /nologo /G6 /MTd /W3 /Gm /ZI /Od /I "..\include" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# SUBTRACT CPP /Fr /YX +# ADD CPP /nologo /G6 /MTd /W3 /Gm /Zi /Od /I "..\include" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe diff --git a/VC++Files/libmysqltest/mytest.c b/VC++Files/libmysqltest/mytest.c new file mode 100644 index 00000000000..9c6818ecf6c --- /dev/null +++ b/VC++Files/libmysqltest/mytest.c @@ -0,0 +1,170 @@ +/*C4*/ +/****************************************************************/ +/* Author: Jethro Wright, III TS : 3/ 4/1998 9:15 */ +/* Date: 02/18/1998 */ +/* mytest.c : do some testing of the libmySQL.DLL.... */ +/* */ +/* History: */ +/* 02/18/1998 jw3 also sprach zarathustra.... */ +/****************************************************************/ + + +#include <windows.h> +#include <stdio.h> +#include <string.h> + +#include <mysql.h> + +#define DEFALT_SQL_STMT "SELECT * FROM db" +#ifndef offsetof +#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) +#endif + + +/******************************************************** +** +** main :- +** +********************************************************/ + +int +main( int argc, char * argv[] ) +{ + + char szSQL[ 200 ], aszFlds[ 25 ][ 25 ], szDB[ 50 ] ; + const char *pszT; + int i, j, k, l, x ; + MYSQL * myData ; + MYSQL_RES * res ; + MYSQL_FIELD * fd ; + MYSQL_ROW row ; + + //....just curious.... + printf( "sizeof( MYSQL ) == %d\n", sizeof( MYSQL ) ) ; + if ( argc == 2 ) + { + strcpy( szDB, argv[ 1 ] ) ; + strcpy( szSQL, DEFALT_SQL_STMT ) ; + if (!strcmp(szDB,"--debug")) + { + strcpy( szDB, "mysql" ) ; + printf("Some mysql struct information (size and offset):\n"); + printf("net:\t%3d %3d\n",sizeof(myData->net),offsetof(MYSQL,net)); + printf("host:\t%3d %3d\n",sizeof(myData->host),offsetof(MYSQL,host)); + printf("port:\t%3d %3d\n",sizeof(myData->port),offsetof(MYSQL,port)); + printf("protocol_version:\t%3d %3d\n",sizeof(myData->protocol_version), + offsetof(MYSQL,protocol_version)); + printf("thread_id:\t%3d %3d\n",sizeof(myData->thread_id), + offsetof(MYSQL,thread_id)); + printf("affected_rows:\t%3d %3d\n",sizeof(myData->affected_rows), + offsetof(MYSQL,affected_rows)); + printf("packet_length:\t%3d %3d\n",sizeof(myData->packet_length), + offsetof(MYSQL,packet_length)); + printf("status:\t%3d %3d\n",sizeof(myData->status), + offsetof(MYSQL,status)); + printf("fields:\t%3d %3d\n",sizeof(myData->fields), + offsetof(MYSQL,fields)); + printf("field_alloc:\t%3d %3d\n",sizeof(myData->field_alloc), + offsetof(MYSQL,field_alloc)); + printf("free_me:\t%3d %3d\n",sizeof(myData->free_me), + offsetof(MYSQL,free_me)); + printf("options:\t%3d %3d\n",sizeof(myData->options), + offsetof(MYSQL,options)); + puts(""); + } + } + else if ( argc > 2 ) { + strcpy( szDB, argv[ 1 ] ) ; + strcpy( szSQL, argv[ 2 ] ) ; + } + else { + strcpy( szDB, "mysql" ) ; + strcpy( szSQL, DEFALT_SQL_STMT ) ; + } + //.... + + if ( (myData = mysql_init((MYSQL*) 0)) && + mysql_real_connect( myData, NULL, NULL, NULL, NULL, MYSQL_PORT, + NULL, 0 ) ) + { + if ( mysql_select_db( myData, szDB ) < 0 ) { + printf( "Can't select the %s database !\n", szDB ) ; + mysql_close( myData ) ; + return 2 ; + } + } + else { + printf( "Can't connect to the mysql server on port %d !\n", + MYSQL_PORT ) ; + mysql_close( myData ) ; + return 1 ; + } + //.... + if ( ! mysql_query( myData, szSQL ) ) { + res = mysql_store_result( myData ) ; + i = (int) mysql_num_rows( res ) ; l = 1 ; + printf( "Query: %s\nNumber of records found: %ld\n", szSQL, i ) ; + //....we can get the field-specific characteristics here.... + for ( x = 0 ; fd = mysql_fetch_field( res ) ; x++ ) + strcpy( aszFlds[ x ], fd->name ) ; + //.... + while ( row = mysql_fetch_row( res ) ) { + j = mysql_num_fields( res ) ; + printf( "Record #%ld:-\n", l++ ) ; + for ( k = 0 ; k < j ; k++ ) + printf( " Fld #%d (%s): %s\n", k + 1, aszFlds[ k ], + (((row[k]==NULL)||(!strlen(row[k])))?"NULL":row[k])) ; + puts( "==============================\n" ) ; + } + mysql_free_result( res ) ; + } + else printf( "Couldn't execute %s on the server !\n", szSQL ) ; + //.... + puts( "==== Diagnostic info ====" ) ; + pszT = mysql_get_client_info() ; + printf( "Client info: %s\n", pszT ) ; + //.... + pszT = mysql_get_host_info( myData ) ; + printf( "Host info: %s\n", pszT ) ; + //.... + pszT = mysql_get_server_info( myData ) ; + printf( "Server info: %s\n", pszT ) ; + //.... + res = mysql_list_processes( myData ) ; l = 1 ; + if (res) + { + for ( x = 0 ; fd = mysql_fetch_field( res ) ; x++ ) + strcpy( aszFlds[ x ], fd->name ) ; + while ( row = mysql_fetch_row( res ) ) { + j = mysql_num_fields( res ) ; + printf( "Process #%ld:-\n", l++ ) ; + for ( k = 0 ; k < j ; k++ ) + printf( " Fld #%d (%s): %s\n", k + 1, aszFlds[ k ], + (((row[k]==NULL)||(!strlen(row[k])))?"NULL":row[k])) ; + puts( "==============================\n" ) ; + } + } + else + { + printf("Got error %s when retreiving processlist\n",mysql_error(myData)); + } + //.... + res = mysql_list_tables( myData, "%" ) ; l = 1 ; + for ( x = 0 ; fd = mysql_fetch_field( res ) ; x++ ) + strcpy( aszFlds[ x ], fd->name ) ; + while ( row = mysql_fetch_row( res ) ) { + j = mysql_num_fields( res ) ; + printf( "Table #%ld:-\n", l++ ) ; + for ( k = 0 ; k < j ; k++ ) + printf( " Fld #%d (%s): %s\n", k + 1, aszFlds[ k ], + (((row[k]==NULL)||(!strlen(row[k])))?"NULL":row[k])) ; + puts( "==============================\n" ) ; + } + //.... + pszT = mysql_stat( myData ) ; + puts( pszT ) ; + //.... + mysql_close( myData ) ; + return 0 ; + +} diff --git a/VC++Files/merge/merge.dsp b/VC++Files/merge/merge.dsp index cb6042e6b68..70c0ce87d6b 100644 --- a/VC++Files/merge/merge.dsp +++ b/VC++Files/merge/merge.dsp @@ -92,10 +92,6 @@ SOURCE=.\mrg_create.c # End Source File # Begin Source File -SOURCE=.\mrg_def.h -# End Source File -# Begin Source File - SOURCE=.\mrg_delete.c # End Source File # Begin Source File @@ -134,9 +130,5 @@ SOURCE=.\mrg_static.c SOURCE=.\mrg_update.c # End Source File -# Begin Source File - -SOURCE=.\mrgdef.h -# End Source File # End Target # End Project diff --git a/VC++Files/myisam/myisam.dsp b/VC++Files/myisam/myisam.dsp index 5c13f5eb206..8346cddbc54 100644 --- a/VC++Files/myisam/myisam.dsp +++ b/VC++Files/myisam/myisam.dsp @@ -89,10 +89,6 @@ SOURCE=.\ft_boolean_search.c # End Source File # Begin Source File -SOURCE=.\ft_eval.c -# End Source File -# Begin Source File - SOURCE=.\ft_nlq_search.c # End Source File # Begin Source File @@ -101,10 +97,6 @@ SOURCE=.\ft_parser.c # End Source File # Begin Source File -SOURCE=.\ft_search.c -# End Source File -# Begin Source File - SOURCE=.\ft_static.c # End Source File # Begin Source File diff --git a/VC++Files/mysql.dsw b/VC++Files/mysql.dsw index 7713b28d978..6a7ec7a57dd 100644 --- a/VC++Files/mysql.dsw +++ b/VC++Files/mysql.dsw @@ -117,6 +117,54 @@ Package=<4> ############################################################################### +Project: "libmysqld"=".\libmysqld\libmysqld.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name bdb + End Project Dependency + Begin Project Dependency + Project_Dep_Name dbug + End Project Dependency + Begin Project Dependency + Project_Dep_Name heap + End Project Dependency + Begin Project Dependency + Project_Dep_Name innobase + End Project Dependency + Begin Project Dependency + Project_Dep_Name myisam + End Project Dependency + Begin Project Dependency + Project_Dep_Name myisammrg + End Project Dependency + Begin Project Dependency + Project_Dep_Name mysys + End Project Dependency + Begin Project Dependency + Project_Dep_Name regex + End Project Dependency + Begin Project Dependency + Project_Dep_Name strings + End Project Dependency + Begin Project Dependency + Project_Dep_Name vio + End Project Dependency + Begin Project Dependency + Project_Dep_Name zlib + End Project Dependency + Begin Project Dependency + Project_Dep_Name merge + End Project Dependency +}}} + +############################################################################### + Project: "merge"=".\merge\merge.dsp" - Package Owner=<4> Package=<5> @@ -396,6 +444,18 @@ Package=<4> ############################################################################### +Project: "mysqldemb"=".\mysqldemb\mysqldemb.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + Project: "mysqldump"=".\client\mysqldump.dsp" - Package Owner=<4> Package=<5> @@ -426,6 +486,54 @@ Package=<4> ############################################################################### +Project: "mysqlserver"=".\mysqlserver\mysqlserver.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name zlib + End Project Dependency + Begin Project Dependency + Project_Dep_Name bdb + End Project Dependency + Begin Project Dependency + Project_Dep_Name dbug + End Project Dependency + Begin Project Dependency + Project_Dep_Name heap + End Project Dependency + Begin Project Dependency + Project_Dep_Name innobase + End Project Dependency + Begin Project Dependency + Project_Dep_Name merge + End Project Dependency + Begin Project Dependency + Project_Dep_Name myisam + End Project Dependency + Begin Project Dependency + Project_Dep_Name myisammrg + End Project Dependency + Begin Project Dependency + Project_Dep_Name mysqldemb + End Project Dependency + Begin Project Dependency + Project_Dep_Name mysys + End Project Dependency + Begin Project Dependency + Project_Dep_Name regex + End Project Dependency + Begin Project Dependency + Project_Dep_Name strings + End Project Dependency +}}} + +############################################################################### + Project: "mysqlshow"=".\client\mysqlshow.dsp" - Package Owner=<4> Package=<5> @@ -582,6 +690,24 @@ Package=<4> ############################################################################### +Project: "test_libmysqld"=".\libmysqld\examples\test_libmysqld.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name libmysqld + End Project Dependency + Begin Project Dependency + Project_Dep_Name mysqlclient + End Project Dependency +}}} + +############################################################################### + Project: "thr_insert_test"=".\thr_insert_test\thr_insert_test.dsp" - Package Owner=<4> Package=<5> diff --git a/VC++Files/mysqlbinlog/mysqlbinlog.dsp b/VC++Files/mysqlbinlog/mysqlbinlog.dsp index 4145585abc5..a62253b2a2c 100644 --- a/VC++Files/mysqlbinlog/mysqlbinlog.dsp +++ b/VC++Files/mysqlbinlog/mysqlbinlog.dsp @@ -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 "../" /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 "../" /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 diff --git a/VC++Files/mysqlcheck/mysqlcheck.dsp b/VC++Files/mysqlcheck/mysqlcheck.dsp index 49c3fc2b702..d4b4f5652b7 100644 --- a/VC++Files/mysqlcheck/mysqlcheck.dsp +++ b/VC++Files/mysqlcheck/mysqlcheck.dsp @@ -49,7 +49,7 @@ BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 mysqlclient.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"../client_release/mysqlcheck.exe" /libpath:"..\lib_release\\" !ELSEIF "$(CFG)" == "mysqlcheck - Win32 Debug" @@ -65,15 +65,15 @@ LINK32=link.exe # PROP Intermediate_Dir "Debug" # 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 "../" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /D "MYSQL_SERVER" /FD /c +# 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 "../" /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 # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 mysqlclient.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"../client_debug/mysqlcheck.exe" /pdbtype:sept /libpath:"..\lib_debug\\" !ENDIF diff --git a/VC++Files/mysqldemb/mysqldemb.dsp b/VC++Files/mysqldemb/mysqldemb.dsp new file mode 100644 index 00000000000..a637c486574 --- /dev/null +++ b/VC++Files/mysqldemb/mysqldemb.dsp @@ -0,0 +1,392 @@ +# Microsoft Developer Studio Project File - Name="mysqldemb" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=mysqldemb - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "mysqldemb.mak". +!MESSAGE +!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 "mysqldemb.mak" CFG="mysqldemb - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mysqldemb - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "mysqldemb - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "mysqldemb - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /MT /W3 /O2 /I "../include" /I "../regex" /I "../sql" /I "../bdb/build_win32" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "HAVE_BERKELEY_DB" /D "USE_SYMDIR" /D "SIGNAL_WITH_VIO_CLOSE" /D "HAVE_DLOPEN" /D "EMBEDDED_LIBRARY" /D "MYSQL_SERVER" /D "HAVE_INNOBASE_DB" /D "DBUG_OFF" /D "USE_TLS" /YX /FD /c +# ADD BASE RSC /l 0x416 /d "NDEBUG" +# ADD RSC /l 0x416 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "mysqldemb - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /Zi /Od /I "../include" /I "../regex" /I "../sql" /I "../bdb/build_win32" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "HAVE_BERKELEY_DB" /D "USE_SYMDIR" /D "SIGNAL_WITH_VIO_CLOSE" /D "HAVE_DLOPEN" /D "EMBEDDED_LIBRARY" /D "MYSQL_SERVER" /D "HAVE_INNOBASE_DB" /D "USE_TLS" /YX /FD /GZ /c +# ADD BASE RSC /l 0x416 /d "_DEBUG" +# ADD RSC /l 0x416 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ENDIF + +# Begin Target + +# Name "mysqldemb - Win32 Release" +# Name "mysqldemb - Win32 Debug" +# Begin Source File + +SOURCE=..\sql\convert.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\derror.cpp +# End Source File +# Begin Source File + +SOURCE=..\libmysql\errmsg.c +# End Source File +# Begin Source File + +SOURCE=..\sql\field.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\field_conv.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\filesort.cpp +# End Source File +# Begin Source File + +SOURCE=..\libmysql\get_password.c +# End Source File +# Begin Source File + +SOURCE=..\sql\ha_berkeley.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\ha_heap.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\ha_innodb.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\ha_isammrg.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\ha_myisam.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\ha_myisammrg.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\handler.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\hash_filo.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\hostname.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\init.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\item.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\item_buff.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\item_cmpfunc.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\item_create.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\item_func.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\item_strfunc.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\item_sum.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\item_timefunc.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\item_uniq.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\key.cpp +# End Source File +# Begin Source File + +SOURCE=..\libmysqld\lib_load.cpp +# End Source File +# Begin Source File + +SOURCE=..\libmysqld\lib_sql.cpp +# End Source File +# Begin Source File + +SOURCE=..\libmysqld\libmysqld.c +# End Source File +# Begin Source File + +SOURCE=..\sql\lock.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\log.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\log_event.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\mf_iocache.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\mini_client.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\net_pkg.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\net_serv.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\opt_ft.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\opt_range.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\opt_sum.cpp +# End Source File +# Begin Source File + +SOURCE=..\libmysql\password.c +# End Source File +# Begin Source File + +SOURCE=..\sql\procedure.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\records.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\repl_failsafe.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\slave.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_acl.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_analyse.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_base.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_cache.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_class.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_crypt.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_db.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_delete.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_do.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_handler.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_insert.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_lex.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_list.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_manager.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_map.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_parse.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_rename.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_repl.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_select.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_show.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_string.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_table.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_test.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_udf.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_union.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_update.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_yacc.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\table.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\thr_malloc.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\time.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\uniques.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\unireg.cpp +# End Source File +# End Target +# End Project diff --git a/VC++Files/mysqlmanager/MySqlManager.dsp b/VC++Files/mysqlmanager/MySqlManager.dsp index 60ee700b00c..56e1b4a5bf2 100644 --- a/VC++Files/mysqlmanager/MySqlManager.dsp +++ b/VC++Files/mysqlmanager/MySqlManager.dsp @@ -71,8 +71,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /Yu"stdafx.h" /FD /c -# ADD CPP /nologo /G6 /MTd /W3 /Gm /GX /ZI /Od /I "../include" /D "_DEBUG" /D "_WINDOWS" /FD /c -# SUBTRACT CPP /Fr /YX /Yc /Yu +# ADD CPP /nologo /G6 /MTd /W3 /Gm /GX /Zi /Od /I "../include" /D "_DEBUG" /D "_WINDOWS" /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 # ADD MTL /nologo /D "_DEBUG" /o "NUL" /win32 # SUBTRACT MTL /mktyplib203 diff --git a/VC++Files/mysqlserver/mysqlserver.dsp b/VC++Files/mysqlserver/mysqlserver.dsp new file mode 100644 index 00000000000..dda50cd5538 --- /dev/null +++ b/VC++Files/mysqlserver/mysqlserver.dsp @@ -0,0 +1,84 @@ +# Microsoft Developer Studio Project File - Name="mysqlserver" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=mysqlserver - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "mysqlserver.mak". +!MESSAGE +!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 "mysqlserver.mak" CFG="mysqlserver - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mysqlserver - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "mysqlserver - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "mysqlserver - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /MT /W3 /O2 /I "../include" /I "../regex" /I "../sql" /I "../bdb/build_win32" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "HAVE_BERKELEY_DB" /D "USE_SYMDIR" /D "SIGNAL_WITH_VIO_CLOSE" /D "HAVE_DLOPEN" /D "EMBEDDED_LIBRARY" /D "HAVE_INNOBASE_DB" /D "DBUG_OFF" /D "USE_TLS" /YX /FD /c +# ADD BASE RSC /l 0x416 /d "NDEBUG" +# ADD RSC /l 0x416 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "mysqlserver - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /Zi /Od /I "../include" /I "../regex" /I "../sql" /I "../bdb/build_win32" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "HAVE_BERKELEY_DB" /D "USE_SYMDIR" /D "SIGNAL_WITH_VIO_CLOSE" /D "HAVE_DLOPEN" /D "EMBEDDED_LIBRARY" /D "HAVE_INNOBASE_DB" /D "USE_TLS" /YX /FD /GZ /c +# ADD BASE RSC /l 0x416 /d "_DEBUG" +# ADD RSC /l 0x416 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ENDIF + +# Begin Target + +# Name "mysqlserver - Win32 Release" +# Name "mysqlserver - Win32 Debug" +# End Target +# End Project diff --git a/VC++Files/mysqlshutdown/mysqlshutdown.c b/VC++Files/mysqlshutdown/mysqlshutdown.c new file mode 100644 index 00000000000..e770149604d --- /dev/null +++ b/VC++Files/mysqlshutdown/mysqlshutdown.c @@ -0,0 +1,198 @@ +/**************************************************************************** + MySqlShutdown - shutdown MySQL on system shutdown (Win95/98) + ---------------------------------------------------------------------------- + Revision History : + Version Author Date Description + 001.00 Irena 21-12-99 +*****************************************************************************/ +#include <windows.h> + +//----------------------------------------------------------------------- +// Local data +//----------------------------------------------------------------------- +static char szAppName[] = "MySqlShutdown"; +static HINSTANCE hInstance; + +#define MYWM_NOTIFYICON (WM_APP+100) + +//----------------------------------------------------------------------- +// Exported functions +//----------------------------------------------------------------------- +LRESULT CALLBACK MainWindowProc (HWND, UINT, WPARAM, LPARAM); + +//----------------------------------------------------------------------- +// Local functions +//----------------------------------------------------------------------- +static BOOL InitAppClass (HINSTANCE hInstance); + +BOOL TrayMessageAdd(HWND hWnd, DWORD dwMessage) +{ + BOOL res; + HICON hIcon =LoadIcon (hInstance, "MySql"); + char *szTip="MySql Shutdown"; + NOTIFYICONDATA tnd; + + tnd.cbSize = sizeof(NOTIFYICONDATA); + tnd.hWnd = hWnd; + tnd.uID = 101; + + tnd.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP; + tnd.uCallbackMessage = MYWM_NOTIFYICON; + tnd.hIcon = hIcon; + strcpy(tnd.szTip, szTip); + res = Shell_NotifyIcon(dwMessage, &tnd); + + if (hIcon) DestroyIcon(hIcon); + + return res; +} + +//----------------------------------------------------------------------- +// Name: WinMain +// Purpose: Main application entry point +//----------------------------------------------------------------------- + +int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow) +{ HWND hWnd; + MSG Msg; + + hInstance=hInst; + // Register application class if needed + if (InitAppClass (hInstance) == FALSE) return (0); + + + hWnd = CreateWindow (szAppName, "MySql", + WS_OVERLAPPEDWINDOW|WS_MINIMIZE, + 0, 0, + GetSystemMetrics(SM_CXSCREEN)/4, + GetSystemMetrics(SM_CYSCREEN)/4, + 0, 0, hInstance, NULL); + + if(!hWnd) + { + return (0); + } + ShowWindow (hWnd, SW_HIDE); + UpdateWindow (hWnd); + while (GetMessage (&Msg, 0, 0, 0)) + { TranslateMessage (&Msg); + DispatchMessage (&Msg); + } + return ((int) (Msg.wParam)); +} + +//----------------------------------------------------------------------- +// Name: InitAppClass +// Purpose: Register the main application window class +//----------------------------------------------------------------------- +static BOOL InitAppClass (HINSTANCE hInstance) +{ + WNDCLASS cls; + + if (GetClassInfo (hInstance, szAppName, &cls) == 0) + { + cls.style = CS_HREDRAW | CS_VREDRAW ;; + cls.lpfnWndProc = (WNDPROC) MainWindowProc; + cls.cbClsExtra = 0; + cls.cbWndExtra = sizeof(HWND); + cls.hInstance = hInstance; + cls.hIcon = LoadIcon (hInstance, "MySql"); + cls.hCursor = LoadCursor (NULL, IDC_ARROW); + cls.hbrBackground = GetStockObject (WHITE_BRUSH) ; + cls.lpszMenuName = 0; //szAppName; + cls.lpszClassName = szAppName; + return RegisterClass (&cls); + } + return (TRUE); +} +//----------------------------------------------------------------------- +// Name: MainWindowProc +// Purpose: Window procedure for main application window. +//----------------------------------------------------------------------- +LRESULT CALLBACK MainWindowProc (HWND hWnd, UINT Msg,WPARAM wParam, LPARAM lParam) +{ + static RECT rect ; + HDC hdc ; + PAINTSTRUCT ps ; + static BOOL bShutdown=FALSE; + + switch (Msg) + { + case WM_CREATE: + TrayMessageAdd(hWnd, NIM_ADD); + return TRUE; +/*************** + case WM_SYSCOMMAND: + if(wParam==SC_CLOSE) + { HANDLE hEventShutdown; + + bShutdown=TRUE; + InvalidateRect(hWnd,NULL,TRUE); + ShowWindow (hWnd, SW_NORMAL); + UpdateWindow(hWnd); + hEventShutdown=OpenEvent(EVENT_MODIFY_STATE, 0, "MySqlShutdown"); + if(hEventShutdown) + { + SetEvent(hEventShutdown); + CloseHandle(hEventShutdown); + Sleep(1000); + MessageBox(hWnd,"Shutdown", "MySql", MB_OK); + } + TrayMessageAdd(hWnd, NIM_DELETE); + } + break; +**************/ + case WM_DESTROY: + TrayMessageAdd(hWnd, NIM_DELETE); + PostQuitMessage (0); + return 0; + case WM_SIZE: + GetClientRect (hWnd, &rect) ; + return 0 ; + + case WM_PAINT: + hdc = BeginPaint (hWnd, &ps) ; + if(bShutdown) + DrawText (hdc, "MySql shutdown in progress...", + -1, &rect, DT_WORDBREAK) ; + EndPaint (hWnd, &ps) ; + return 0 ; + case WM_QUERYENDSESSION: //Shutdown MySql + { HANDLE hEventShutdown; + + bShutdown=TRUE; + InvalidateRect(hWnd,NULL,TRUE); + ShowWindow (hWnd, SW_NORMAL); + UpdateWindow(hWnd); + hEventShutdown=OpenEvent(EVENT_MODIFY_STATE, 0, "MySqlShutdown"); + if(hEventShutdown) + { + SetEvent(hEventShutdown); + CloseHandle(hEventShutdown); + Sleep(1000); + MessageBox(hWnd,"Shutdown", "MySql", MB_OK); + } + } + return 1; + + case MYWM_NOTIFYICON: + switch (lParam) + { + case WM_LBUTTONDOWN: + case WM_RBUTTONDOWN: + ShowWindow(hWnd, SW_SHOWNORMAL); + SetForegroundWindow(hWnd); // make us come to the front + break; + default: + break; + } + break; + + } + return DefWindowProc (hWnd, Msg, wParam, lParam); +} + + +// ----------------------- The end ------------------------------------------ + + diff --git a/VC++Files/mysqlwatch/mysqlwatch.c b/VC++Files/mysqlwatch/mysqlwatch.c new file mode 100644 index 00000000000..2aba6814869 --- /dev/null +++ b/VC++Files/mysqlwatch/mysqlwatch.c @@ -0,0 +1,745 @@ +/**************************************************************************** + MySqlWatch - WinNT service program MySQL + - Re-start MySql server in case of failure +*****************************************************************************/ +#include <windows.h> +#include <stdio.h> +#include <stdlib.h> +#include <process.h> +#include <tchar.h> + + +// name of the executable +#define SZAPPNAME "mysqlwatch" +// internal name of the service +#define SZSERVICENAME "MySqlWatch" +// displayed name of the service +#define SZSERVICEDISPLAYNAME "MySqlWatch" +// list of service dependencies - "dep1\0dep2\0\0" +#define SZDEPENDENCIES "" + + + +VOID ServiceStart(DWORD dwArgc, LPTSTR *lpszArgv); +VOID ServiceStop(void); +BOOL ReportStatusToSCMgr(DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwWaitHint); +void AddToMessageLog(LPTSTR lpszMsg); + +// internal variables +SERVICE_STATUS ssStatus; // current status of the service +SERVICE_STATUS_HANDLE sshStatusHandle; +DWORD dwErr = 0; +BOOL bDebug = FALSE; +TCHAR szErr[256]; + +// internal function prototypes +void WINAPI service_ctrl(DWORD dwCtrlCode); +void WINAPI service_main(DWORD dwArgc, LPTSTR *lpszArgv); +void CmdInstallService(void); +void CmdRemoveService(void); +void CmdDebugService(int argc, char **argv); +BOOL WINAPI ControlHandler ( DWORD dwCtrlType ); +LPTSTR GetLastErrorText( LPTSTR lpszBuf, DWORD dwSize ); + +// +// FUNCTION: main +// +// PURPOSE: entrypoint for service +// +// PARAMETERS: +// argc - number of command line arguments +// argv - array of command line arguments +// +// RETURN VALUE: +// none +// +// COMMENTS: +// main() either performs the command line task, or +// call StartServiceCtrlDispatcher to register the +// main service thread. When the this call returns, +// the service has stopped, so exit. +// +void main(int argc, char **argv) +{ + SERVICE_TABLE_ENTRY dispatchTable[] = + { + { TEXT(SZSERVICENAME), (LPSERVICE_MAIN_FUNCTION)service_main }, + { NULL, NULL } + }; + + if ( (argc > 1) && + ((*argv[1] == '-') || (*argv[1] == '/')) ) + { + if ( stricmp( "install", argv[1]+1 ) == 0 ) + { + CmdInstallService(); + } + else if ( stricmp( "remove", argv[1]+1 ) == 0 ) + { + CmdRemoveService(); + } + else if ( stricmp( "debug", argv[1]+1 ) == 0 ) + { + bDebug = TRUE; + CmdDebugService(argc, argv); + } + else + { + goto dispatch; + } + exit(0); + } + + // if it doesn't match any of the above parameters + // the service control manager may be starting the service + // so we must call StartServiceCtrlDispatcher + dispatch: + // this is just to be friendly + printf( "%s -install to install the service\n", SZAPPNAME ); + printf( "%s -remove to remove the service\n", SZAPPNAME ); + printf( "%s -debug <params> to run as a console app for debugging\n", SZAPPNAME ); + printf( "\nStartServiceCtrlDispatcher being called.\n" ); + printf( "This may take several seconds. Please wait.\n" ); + + if (!StartServiceCtrlDispatcher(dispatchTable)) + AddToMessageLog(TEXT("StartServiceCtrlDispatcher failed.")); +} + + + +// +// FUNCTION: service_main +// +// PURPOSE: To perform actual initialization of the service +// +// PARAMETERS: +// dwArgc - number of command line arguments +// lpszArgv - array of command line arguments +// +// RETURN VALUE: +// none +// +// COMMENTS: +// This routine performs the service initialization and then calls +// the user defined ServiceStart() routine to perform majority +// of the work. +// +void WINAPI service_main(DWORD dwArgc, LPTSTR *lpszArgv) +{ + + // register our service control handler: + // + sshStatusHandle = RegisterServiceCtrlHandler( TEXT(SZSERVICENAME), service_ctrl); + + if (!sshStatusHandle) + goto cleanup; + + // SERVICE_STATUS members that don't change in example + // + ssStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; + ssStatus.dwServiceSpecificExitCode = 0; + + + // report the status to the service control manager. + // + if (!ReportStatusToSCMgr( + SERVICE_START_PENDING, // service state + NO_ERROR, // exit code + 3000)) // wait hint + goto cleanup; + + + ServiceStart( dwArgc, lpszArgv ); + +cleanup: + + // try to report the stopped status to the service control manager. + // + if (sshStatusHandle) + ReportStatusToSCMgr( + SERVICE_STOPPED, + dwErr, + 0); + + return; +} + + + +// +// FUNCTION: service_ctrl +// +// PURPOSE: This function is called by the SCM whenever +// ControlService() is called on this service. +// +// PARAMETERS: +// dwCtrlCode - type of control requested +// +// RETURN VALUE: +// none +// +// COMMENTS: +// +void WINAPI service_ctrl(DWORD dwCtrlCode) +{ + // Handle the requested control code. + // + switch(dwCtrlCode) + { + // Stop the service. + // + case SERVICE_CONTROL_STOP: + ssStatus.dwCurrentState = SERVICE_STOP_PENDING; + ServiceStop(); + break; + + // Update the service status. + // + case SERVICE_CONTROL_INTERROGATE: + break; + + // invalid control code + // + default: + break; + + } + + ReportStatusToSCMgr(ssStatus.dwCurrentState, NO_ERROR, 0); + +} + + + +// +// FUNCTION: ReportStatusToSCMgr() +// +// PURPOSE: Sets the current status of the service and +// reports it to the Service Control Manager +// +// PARAMETERS: +// dwCurrentState - the state of the service +// dwWin32ExitCode - error code to report +// dwWaitHint - worst case estimate to next checkpoint +// +// RETURN VALUE: +// TRUE - success +// FALSE - failure +// +// COMMENTS: +// +BOOL ReportStatusToSCMgr(DWORD dwCurrentState, + DWORD dwWin32ExitCode, + DWORD dwWaitHint) +{ + static DWORD dwCheckPoint = 1; + BOOL fResult = TRUE; + + + if ( !bDebug ) // when debugging we don't report to the SCM + { + if (dwCurrentState == SERVICE_START_PENDING) + ssStatus.dwControlsAccepted = 0; + else + ssStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP; + + ssStatus.dwCurrentState = dwCurrentState; + ssStatus.dwWin32ExitCode = dwWin32ExitCode; + ssStatus.dwWaitHint = dwWaitHint; + + if ( ( dwCurrentState == SERVICE_RUNNING ) || + ( dwCurrentState == SERVICE_STOPPED ) ) + ssStatus.dwCheckPoint = 0; + else + ssStatus.dwCheckPoint = dwCheckPoint++; + + + // Report the status of the service to the service control manager. + // + if (!(fResult = SetServiceStatus( sshStatusHandle, &ssStatus))) { + AddToMessageLog(TEXT("SetServiceStatus")); + } + } + return fResult; +} + + + +// +// FUNCTION: AddToMessageLog(LPTSTR lpszMsg) +// +// PURPOSE: Allows any thread to log an error message +// +// PARAMETERS: +// lpszMsg - text for message +// +// RETURN VALUE: +// none +// +// COMMENTS: +// +void AddToMessageLog(LPTSTR lpszMsg) +{ + TCHAR szMsg[256]; + HANDLE hEventSource; + LPTSTR lpszStrings[2]; + + + if ( !bDebug ) + { + dwErr = GetLastError(); + + // Use event logging to log the error. + // + hEventSource = RegisterEventSource(NULL, TEXT(SZSERVICENAME)); + + _stprintf(szMsg, TEXT("%s error: %d"), TEXT(SZSERVICENAME), dwErr); + lpszStrings[0] = szMsg; + lpszStrings[1] = lpszMsg; + + if (hEventSource != NULL) { + ReportEvent(hEventSource, // handle of event source + EVENTLOG_ERROR_TYPE, // event type + 0, // event category + 0, // event ID + NULL, // current user's SID + 2, // strings in lpszStrings + 0, // no bytes of raw data + lpszStrings, // array of error strings + NULL); // no raw data + + DeregisterEventSource(hEventSource); + } + } +} + + + + +/////////////////////////////////////////////////////////////////// +// +// The following code handles service installation and removal +// + + +// +// FUNCTION: CmdInstallService() +// +// PURPOSE: Installs the service +// +// PARAMETERS: +// none +// +// RETURN VALUE: +// none +// +// COMMENTS: +// +void CmdInstallService() +{ + SC_HANDLE schService; + SC_HANDLE schSCManager; + + TCHAR szPath[512]; + + if ( GetModuleFileName( NULL, szPath, 512 ) == 0 ) + { + _tprintf(TEXT("Unable to install %s - %s\n"), TEXT(SZSERVICEDISPLAYNAME), GetLastErrorText(szErr, 256)); + return; + } + + schSCManager = OpenSCManager( + NULL, // machine (NULL == local) + NULL, // database (NULL == default) + SC_MANAGER_ALL_ACCESS // access required + ); + if ( schSCManager ) + { + schService = CreateService( + schSCManager, // SCManager database + TEXT(SZSERVICENAME), // name of service + TEXT(SZSERVICEDISPLAYNAME), // name to display + SERVICE_ALL_ACCESS, // desired access + SERVICE_WIN32_OWN_PROCESS, // service type + SERVICE_DEMAND_START, // start type + SERVICE_ERROR_NORMAL, // error control type + szPath, // service's binary + NULL, // no load ordering group + NULL, // no tag identifier + TEXT(SZDEPENDENCIES), // dependencies + NULL, // LocalSystem account + NULL); // no password + + if ( schService ) + { + _tprintf(TEXT("%s installed.\n"), TEXT(SZSERVICEDISPLAYNAME) ); + CloseServiceHandle(schService); + } + else + { + _tprintf(TEXT("CreateService failed - %s\n"), GetLastErrorText(szErr, 256)); + } + + CloseServiceHandle(schSCManager); + } + else + _tprintf(TEXT("OpenSCManager failed - %s\n"), GetLastErrorText(szErr,256)); +} + + + +// +// FUNCTION: CmdRemoveService() +// +// PURPOSE: Stops and removes the service +// +// PARAMETERS: +// none +// +// RETURN VALUE: +// none +// +// COMMENTS: +// +void CmdRemoveService() +{ + SC_HANDLE schService; + SC_HANDLE schSCManager; + + schSCManager = OpenSCManager( + NULL, // machine (NULL == local) + NULL, // database (NULL == default) + SC_MANAGER_ALL_ACCESS // access required + ); + if ( schSCManager ) + { + schService = OpenService(schSCManager, TEXT(SZSERVICENAME), SERVICE_ALL_ACCESS); + + if (schService) + { + // try to stop the service + if ( ControlService( schService, SERVICE_CONTROL_STOP, &ssStatus ) ) + { + _tprintf(TEXT("Stopping %s."), TEXT(SZSERVICEDISPLAYNAME)); + Sleep( 1000 ); + + while( QueryServiceStatus( schService, &ssStatus ) ) + { + if ( ssStatus.dwCurrentState == SERVICE_STOP_PENDING ) + { + _tprintf(TEXT(".")); + Sleep( 1000 ); + } + else + break; + } + + if ( ssStatus.dwCurrentState == SERVICE_STOPPED ) + _tprintf(TEXT("\n%s stopped.\n"), TEXT(SZSERVICEDISPLAYNAME) ); + else + _tprintf(TEXT("\n%s failed to stop.\n"), TEXT(SZSERVICEDISPLAYNAME) ); + + } + + // now remove the service + if( DeleteService(schService) ) + _tprintf(TEXT("%s removed.\n"), TEXT(SZSERVICEDISPLAYNAME) ); + else + _tprintf(TEXT("DeleteService failed - %s\n"), GetLastErrorText(szErr,256)); + + + CloseServiceHandle(schService); + } + else + _tprintf(TEXT("OpenService failed - %s\n"), GetLastErrorText(szErr,256)); + + CloseServiceHandle(schSCManager); + } + else + _tprintf(TEXT("OpenSCManager failed - %s\n"), GetLastErrorText(szErr,256)); +} + + + + + +// +// FUNCTION: CmdRestartService() +// +// PURPOSE: Stops and removes the service +// +// PARAMETERS: +// none +// +// RETURN VALUE: +// none +// +// COMMENTS: +// +void CmdRestartService(char *szServiceName) +{ + SC_HANDLE schService; + SC_HANDLE schSCManager; + + schSCManager = OpenSCManager( + NULL, // machine (NULL == local) + NULL, // database (NULL == default) + SC_MANAGER_ALL_ACCESS // access required + ); + if ( schSCManager ) + { + schService = OpenService(schSCManager, TEXT(szServiceName), SERVICE_ALL_ACCESS); + if (schService) + { + if(! ControlService( schService, SERVICE_CONTROL_INTERROGATE, &ssStatus ) ) + //if(QueryServiceStatus( schService, &ssStatus )==0) + { + if(GetLastError()==ERROR_SERVICE_NOT_ACTIVE) + { + + //AddToMessageLog(TEXT("Start service...")); + StartService( schService, 0,NULL); + } + else + { ; + //AddToMessageLog(TEXT("QueryService...")); + //AddToMessageLog(TEXT(GetLastErrorText(szErr,256))); + } + } + CloseServiceHandle(schService); + } + else + { _tprintf(TEXT("OpenService failed - %s\n"), GetLastErrorText(szErr,256)); + AddToMessageLog(TEXT("OpenService...")); + AddToMessageLog(TEXT(GetLastErrorText(szErr,256))); + + } + CloseServiceHandle(schSCManager); + } + else + { _tprintf(TEXT("OpenSCManager failed - %s\n"), GetLastErrorText(szErr,256)); + AddToMessageLog(TEXT("OpenSCMManager..")); + + } +} + + + + +/////////////////////////////////////////////////////////////////// +// +// The following code is for running the service as a console app +// + + +// +// FUNCTION: CmdDebugService(int argc, char ** argv) +// +// PURPOSE: Runs the service as a console application +// +// PARAMETERS: +// argc - number of command line arguments +// argv - array of command line arguments +// +// RETURN VALUE: +// none +// +// COMMENTS: +// +void CmdDebugService(int argc, char ** argv) +{ + DWORD dwArgc; + LPTSTR *lpszArgv; + +#ifdef UNICODE + lpszArgv = CommandLineToArgvW(GetCommandLineW(), &(dwArgc) ); +#else + dwArgc = (DWORD) argc; + lpszArgv = argv; +#endif + + _tprintf(TEXT("Debugging %s.\n"), TEXT(SZSERVICEDISPLAYNAME)); + + SetConsoleCtrlHandler( ControlHandler, TRUE ); + + ServiceStart( dwArgc, lpszArgv ); +} + + +// +// FUNCTION: ControlHandler ( DWORD dwCtrlType ) +// +// PURPOSE: Handled console control events +// +// PARAMETERS: +// dwCtrlType - type of control event +// +// RETURN VALUE: +// True - handled +// False - unhandled +// +// COMMENTS: +// +BOOL WINAPI ControlHandler ( DWORD dwCtrlType ) +{ + switch( dwCtrlType ) + { + case CTRL_BREAK_EVENT: // use Ctrl+C or Ctrl+Break to simulate + case CTRL_C_EVENT: // SERVICE_CONTROL_STOP in debug mode + _tprintf(TEXT("Stopping %s.\n"), TEXT(SZSERVICEDISPLAYNAME)); + ServiceStop(); + return TRUE; + break; + + } + return FALSE; +} + +// +// FUNCTION: GetLastErrorText +// +// PURPOSE: copies error message text to string +// +// PARAMETERS: +// lpszBuf - destination buffer +// dwSize - size of buffer +// +// RETURN VALUE: +// destination buffer +// +// COMMENTS: +// +LPTSTR GetLastErrorText( LPTSTR lpszBuf, DWORD dwSize ) +{ + DWORD dwRet; + LPTSTR lpszTemp = NULL; + + dwRet = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_ARGUMENT_ARRAY, + NULL, + GetLastError(), + LANG_NEUTRAL, + (LPTSTR)&lpszTemp, + 0, + NULL ); + + // supplied buffer is not long enough + if ( !dwRet || ( (long)dwSize < (long)dwRet+14 ) ) + lpszBuf[0] = TEXT('\0'); + else + { + lpszTemp[lstrlen(lpszTemp)-2] = TEXT('\0'); //remove cr and newline character + _stprintf( lpszBuf, TEXT("%s (0x%x)"), lpszTemp, GetLastError() ); + } + + if ( lpszTemp ) + LocalFree((HLOCAL) lpszTemp ); + + return lpszBuf; +} + +//------------------------------------------------- +// this event is signalled when the +// service should end +//------------------------------------------------- +HANDLE hServerStopEvent = NULL; + + +//------------------------------------------------- +// FUNCTION: ServiceStart +// +// PURPOSE: Actual code of the service +// that does the work. +//------------------------------------------------- +void ServiceStart (DWORD dwArgc, LPTSTR *lpszArgv) +{ + DWORD dwWait,dwTimeout=1000*60*1; + + if (!ReportStatusToSCMgr( + SERVICE_START_PENDING, // service state + NO_ERROR, // exit code + 3000)) // wait hint + goto cleanup; + + // create the event object. The control handler function signals + // this event when it receives the "stop" control code. + // + hServerStopEvent = CreateEvent( + NULL, // no security attributes + TRUE, // manual reset event + FALSE, // not-signalled + NULL); // no name + + if ( hServerStopEvent == NULL) goto cleanup; + + + // report the status to the service control manager. + // + if (!ReportStatusToSCMgr( + SERVICE_START_PENDING, // service state + NO_ERROR, // exit code + 3000)) // wait hint + goto cleanup; + + + + // report the status to the service control manager. + // + if (!ReportStatusToSCMgr( + SERVICE_START_PENDING, // service state + NO_ERROR, // exit code + 3000)) // wait hint + goto cleanup; + + + + // report the status to the service control manager. + // + if (!ReportStatusToSCMgr( + SERVICE_RUNNING, // service state + NO_ERROR, // exit code + 0)) // wait hint + goto cleanup; + + // + // End of initialization + // Service is now running, perform work until shutdown + // + + while ( 1 ) + { + + dwWait = WaitForSingleObject( hServerStopEvent, dwTimeout); + if(dwWait==WAIT_FAILED) + { + AddToMessageLog(TEXT("Error in WaitForSingleObject")); + break; + } + else if(dwWait==WAIT_TIMEOUT) + { + CmdRestartService("MySql"); + } + else + { break; //shutdown + } + + } + + cleanup: + + if (hServerStopEvent) + CloseHandle(hServerStopEvent); + +} + + +//------------------------------------------------- +// FUNCTION: ServiceStop +// +// PURPOSE: Stops the service +//------------------------------------------------- +void ServiceStop() +{ + if ( hServerStopEvent ) + SetEvent(hServerStopEvent); +} +//-the end ---------------------------------------- diff --git a/VC++Files/mysys/mysys.dsp b/VC++Files/mysys/mysys.dsp index eb467e55892..7a0087b68d6 100644 --- a/VC++Files/mysys/mysys.dsp +++ b/VC++Files/mysys/mysys.dsp @@ -66,8 +66,7 @@ LIB32=link.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 -# SUBTRACT CPP /Fr +# 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 BASE RSC /l 0x409 # ADD RSC /l 0x409 BSC32=bscmake.exe @@ -142,23 +141,15 @@ SOURCE=.\errors.c # End Source File # Begin Source File -SOURCE=.\getopt.c -# End Source File -# Begin Source File - -SOURCE=.\getopt1.c -# End Source File -# Begin Source File - -SOURCE=.\getvar.c +SOURCE=.\hash.c # End Source File # Begin Source File -SOURCE=.\hash.c +SOURCE=.\list.c # End Source File # Begin Source File -SOURCE=.\list.c +SOURCE=.\md5.c # End Source File # Begin Source File @@ -210,10 +201,6 @@ SOURCE=.\mf_pack.c # End Source File # Begin Source File -SOURCE=.\mf_pack2.c -# End Source File -# Begin Source File - SOURCE=.\mf_path.c # End Source File # Begin Source File @@ -242,7 +229,7 @@ SOURCE=.\mf_soundex.c # End Source File # Begin Source File -SOURCE=.\mf_stripp.c +SOURCE=.\mf_strip.c # End Source File # Begin Source File @@ -262,6 +249,10 @@ SOURCE=.\mulalloc.c # End Source File # Begin Source File +SOURCE=.\my_aes.c +# End Source File +# Begin Source File + SOURCE=.\my_alarm.c # End Source File # Begin Source File @@ -322,6 +313,14 @@ SOURCE=.\my_fstream.c # End Source File # Begin Source File +SOURCE=.\my_gethostbyname.c +# End Source File +# Begin Source File + +SOURCE=.\my_getopt.c +# End Source File +# Begin Source File + SOURCE=.\my_getwd.c # End Source File # Begin Source File @@ -438,6 +437,10 @@ SOURCE=.\my_wincond.c # End Source File # Begin Source File +SOURCE=.\my_winsem.c +# End Source File +# Begin Source File + SOURCE=.\my_winthread.c # End Source File # Begin Source File @@ -462,10 +465,18 @@ SOURCE=.\raid.cpp # End Source File # Begin Source File +SOURCE=.\rijndael.c +# End Source File +# Begin Source File + SOURCE=.\safemalloc.c # End Source File # Begin Source File +SOURCE=.\sha1.c +# End Source File +# Begin Source File + SOURCE=.\string.c # End Source File # Begin Source File diff --git a/VC++Files/pack_isam/pack_isam.dsp b/VC++Files/pack_isam/pack_isam.dsp index 20c832c96d0..036dcd9a2ca 100644 --- a/VC++Files/pack_isam/pack_isam.dsp +++ b/VC++Files/pack_isam/pack_isam.dsp @@ -66,8 +66,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 "../isam" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c -# SUBTRACT CPP /Fr +# ADD CPP /nologo /G6 /MTd /W3 /Gm /Zi /Od /I "../include" /I "../isam" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe diff --git a/VC++Files/perror/perror.dsp b/VC++Files/perror/perror.dsp index 439fcef1547..2b720ace3e7 100644 --- a/VC++Files/perror/perror.dsp +++ b/VC++Files/perror/perror.dsp @@ -43,7 +43,7 @@ RSC=rc.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /G6 /MT /W3 /GX- /O2 /I "../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" @@ -70,7 +70,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 "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /G6 /MTd /W3 /Gm /GX- /ZI /Od /I "../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /G6 /MTd /W3 /Gm /Zi /Od /I "../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" diff --git a/VC++Files/replace/replace.dsp b/VC++Files/replace/replace.dsp index 011b62d08ec..54584151418 100644 --- a/VC++Files/replace/replace.dsp +++ b/VC++Files/replace/replace.dsp @@ -67,8 +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 /c -# ADD CPP /nologo /G6 /MTd /W3 /Gm /ZI /Od /I "../include" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c -# SUBTRACT CPP /YX +# ADD CPP /nologo /G6 /MTd /W3 /Gm /Zi /Od /I "../include" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c # ADD BASE RSC /l 0x40b /d "_DEBUG" # ADD RSC /l 0x40b /d "_DEBUG" BSC32=bscmake.exe diff --git a/VC++Files/sql/mysqld.dsp b/VC++Files/sql/mysqld.dsp index ec4722d7f27..a84af8adedc 100644 --- a/VC++Files/sql/mysqld.dsp +++ b/VC++Files/sql/mysqld.dsp @@ -71,8 +71,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 /c -# ADD CPP /nologo /G6 /MTd /W3 /Gm /ZI /Od /I "../include" /I "../regex" /I "../bdb/build_win32" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "HAVE_INNOBASE_DB" /D "HAVE_BERKELEY_DB" /D "USE_SYMDIR" /D "SIGNAL_WITH_VIO_CLOSE" /D "HAVE_DLOPEN" /FD /c -# SUBTRACT CPP /Fr /YX +# ADD CPP /nologo /G6 /MTd /W3 /Gm /Zi /Od /I "../include" /I "../regex" /I "../bdb/build_win32" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "HAVE_INNOBASE_DB" /D "HAVE_BERKELEY_DB" /D "USE_SYMDIR" /D "SIGNAL_WITH_VIO_CLOSE" /D "HAVE_DLOPEN" /FD /c # ADD BASE RSC /l 0x410 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe @@ -286,7 +285,7 @@ SOURCE=.\ha_heap.cpp # End Source File # Begin Source File -SOURCE=.\ha_innobase.cpp +SOURCE=.\ha_innodb.cpp # End Source File # Begin Source File @@ -615,10 +614,6 @@ SOURCE=.\log_event.cpp # End Source File # Begin Source File -SOURCE=.\md5.c -# End Source File -# Begin Source File - SOURCE=.\mf_iocache.cpp !IF "$(CFG)" == "mysqld - Win32 Release" @@ -927,6 +922,10 @@ SOURCE=.\sql_delete.cpp # End Source File # Begin Source File +SOURCE=.\sql_do.cpp +# End Source File +# Begin Source File + SOURCE=.\sql_handler.cpp # End Source File # Begin Source File diff --git a/VC++Files/test1/test1.dsp b/VC++Files/test1/test1.dsp index 50a165e3e4d..ffa5fd4d7ed 100644 --- a/VC++Files/test1/test1.dsp +++ b/VC++Files/test1/test1.dsp @@ -67,8 +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 /c -# ADD CPP /nologo /G6 /MTd /W3 /Gm /ZI /Od /I "../include" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c -# SUBTRACT CPP /YX +# ADD CPP /nologo /G6 /MTd /W3 /Gm /Zi /Od /I "../include" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe diff --git a/VC++Files/thr_insert_test/thr_insert_test.dsp b/VC++Files/thr_insert_test/thr_insert_test.dsp index 770125ab65b..91274e6817a 100644 --- a/VC++Files/thr_insert_test/thr_insert_test.dsp +++ b/VC++Files/thr_insert_test/thr_insert_test.dsp @@ -43,7 +43,7 @@ RSC=rc.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /G6 /MT /W3 /GX- /O2 /I "../include" /I "../" /D "NDEBUG" /D "DBUG_OFF" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c +# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../" /D "NDEBUG" /D "DBUG_OFF" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" @@ -70,7 +70,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 "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /G6 /MTd /W3 /Gm /GX- /ZI /Od /I "../include" /I "../" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c +# ADD CPP /nologo /G6 /MTd /W3 /Gm /Zi /Od /I "../include" /I "../" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" diff --git a/VC++Files/thr_test/thr_test.dsp b/VC++Files/thr_test/thr_test.dsp index 7256f8da2fa..495d7280808 100644 --- a/VC++Files/thr_test/thr_test.dsp +++ b/VC++Files/thr_test/thr_test.dsp @@ -68,8 +68,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 /c -# ADD CPP /nologo /G6 /MTd /W3 /Gm /ZI /Od /I "../include" /D "__WIN32__" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c -# SUBTRACT CPP /Fr /YX +# ADD CPP /nologo /G6 /MTd /W3 /Gm /Zi /Od /I "../include" /D "__WIN32__" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /FD /c # ADD BASE RSC /l 0x40b /d "_DEBUG" # ADD RSC /l 0x40b /d "_DEBUG" BSC32=bscmake.exe diff --git a/VC++Files/vio/vio.dsp b/VC++Files/vio/vio.dsp index d4b77aad391..7c6ecb47e5d 100644 --- a/VC++Files/vio/vio.dsp +++ b/VC++Files/vio/vio.dsp @@ -64,7 +64,7 @@ LIB32=link.exe -lib # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /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" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_WINDOWS" /D "USE_SYMDIR" /FD /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe diff --git a/VC++Files/winmysqladmin/db.cpp b/VC++Files/winmysqladmin/db.cpp new file mode 100644 index 00000000000..6e796856a7e --- /dev/null +++ b/VC++Files/winmysqladmin/db.cpp @@ -0,0 +1,80 @@ +//--------------------------------------------------------------------------- +#include <vcl.h> +#pragma hdrstop + +#include "db.h" +#include "main.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +Tdbfrm *dbfrm; +//--------------------------------------------------------------------------- +__fastcall Tdbfrm::Tdbfrm(TComponent* Owner) + : TForm(Owner) +{ +} +//--------------------------------------------------------------------------- +void __fastcall Tdbfrm::SpeedButton2Click(TObject *Sender) +{ + Close(); +} +//--------------------------------------------------------------------------- +void __fastcall Tdbfrm::SpeedButton1Click(TObject *Sender) +{ + if (VerDBName()) + { + if (!Form1->CreatingDB()) + { + Form1->OutRefresh(); + Edit1->Text = ""; + Application->MessageBox("The database was created", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION); + } + } + + + + + +} +//--------------------------------------------------------------------------- +bool __fastcall Tdbfrm::VerDBName() +{ + String temp = Edit1->Text; + if (Edit1->Text.IsEmpty()) + { + Application->MessageBox("The name of the Database is Empty", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION); + return false; + } + + if (temp.Length() > 64) + { + Application->MessageBox("The name of the Database can't have more than 64 characters ", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION); + return false; + } + + for (int j = 1; j <= temp.Length(); j++) + { + if (temp[j] == ' ') + { + Application->MessageBox("The name of the Database can't have blank spaces ", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION); + return false; + } + else if (temp[j] == '/') + { + Application->MessageBox("The name of the Database can't have frontslash (/)", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION); + return false; + } + else if (temp[j] == '\\') + { + Application->MessageBox("The name of the Database can't have backslash (\\)", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION); + return false; + } + else if (temp[j] == '.') + { + Application->MessageBox("The name of the Database can't have periods", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION); + return false; + } + } + return true; +} +//--------------------------------------------------------------------------- diff --git a/VC++Files/winmysqladmin/db.h b/VC++Files/winmysqladmin/db.h new file mode 100644 index 00000000000..f7ab87351ea --- /dev/null +++ b/VC++Files/winmysqladmin/db.h @@ -0,0 +1,32 @@ +//--------------------------------------------------------------------------- +#ifndef dbH +#define dbH +//--------------------------------------------------------------------------- +#include <Classes.hpp> +#include <Controls.hpp> +#include <StdCtrls.hpp> +#include <Forms.hpp> +#include <ExtCtrls.hpp> +#include <Graphics.hpp> +#include <Buttons.hpp> +//--------------------------------------------------------------------------- +class Tdbfrm : public TForm +{ +__published: // IDE-managed Components + TImage *Image1; + TLabel *Label1; + TLabel *Label2; + TEdit *Edit1; + TSpeedButton *SpeedButton1; + TSpeedButton *SpeedButton2; + void __fastcall SpeedButton2Click(TObject *Sender); + void __fastcall SpeedButton1Click(TObject *Sender); +private: // User declarations + bool __fastcall VerDBName(); +public: // User declarations + __fastcall Tdbfrm(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE Tdbfrm *dbfrm; +//--------------------------------------------------------------------------- +#endif diff --git a/VC++Files/winmysqladmin/images/Goahead.ico b/VC++Files/winmysqladmin/images/Goahead.ico new file mode 100644 index 0000000000000000000000000000000000000000..8241c90e2a20f50b923ce020a2607f1e90030b94 GIT binary patch literal 766 zcmb_aF%p6>5M0z58)mSwmC|46)AF=DfEm6(X-R3pOx(RofI`v23zy5@Zte&Ks5sj8 z1leN;oEfk5mVT#KIB*66x%U=Gk_o{BXD$(AWE7F?K}uTDIh4}$lXbL3SPOPtEE$Kh zqQIP}7i>F(**P&77M-zr)N4$^H!S(Qp9TJa^)@n=vU<J4sbFhoH2IoY6Nvuwz7&YI z11qwE1)kRr*w3_MWAhjGwPwj_CE+MnSp5%I6m~n>(Z(jFP}!B3fZG$ej6fqFfMW#q Z#RIS7mKUAkz`do8YO1zfJM~ge+6yHyON{^k literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/HELP.ICO b/VC++Files/winmysqladmin/images/HELP.ICO new file mode 100644 index 0000000000000000000000000000000000000000..d0cd6d68cce7ad691f9cb56393dd3c3b495cd7d6 GIT binary patch literal 766 zcmc(d!41MN3`JeU0Gv4Y$QX>)(K<lXuEC-51eMBvPF$o&aOJml{OxbkB$y3)#_?w0 zbuqhZeaJ@HQ#ROD{ud@Qy*5pCkymK*JZq(J#B0YvB-29*9w<VM@OyEgtSz%I?i<z; zgr(p^uzPY3feOw%(hSp@9Kiyw{UPXh$W@56``S27pz-YYbs>As%f7RobL#he=Jq@r zQr~lS5I?lwh2**W))3!E{Ef4J)c{eP#}>4423D?s1C=a!9JmD0pnSa$1xn!Sg>hdX Q@2kI0sTf$r`aAp;Z$@n8>i_@% literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/INFO.ICO b/VC++Files/winmysqladmin/images/INFO.ICO new file mode 100644 index 0000000000000000000000000000000000000000..e3afa8cf52c556f048918aa5a290c2fc2b9e730e GIT binary patch literal 766 zcmcgqyN&`e44gfXXjX!XmM!lu;Lk3f<`0O(FHllaQmimDPORmm6LjaSGZ}mAJhZ^T zF-<$ju3x~O_)VYaC;EUj=XX{Beki2@XD(r8L?t{vxNAk{P)O6CR%uIO6s^^IWDK?h zYCW@)``k*HP97B$CYOL|8s!2CM&Sz&nw$k6`1m_-|H9)wv9ZPZ7M|yAr_v+ls^N0q zUf%A{2D1WsFrl7PNE(99l@3AYK_zJQ*0=&HPs(Wa>Vg;W+t$4d{s4Yv;CKfPH(+}K eHU_NZg}-1rK3M96*6T0qrJm}oJ+znh)ZS0XHe=BM literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/Info.bmp b/VC++Files/winmysqladmin/images/Info.bmp new file mode 100644 index 0000000000000000000000000000000000000000..58f729fb1fd1460f8edc18164815bee6b77b58fa GIT binary patch literal 644 zcmchTJr2S!424|^TLwl(M$W*<Sc&U&&QUl5NALk6aSzT=DZFRLN-H6;;U;<h{F5fR z-RGT{%~&s(=Qan~!`s?%gINSaa(2NAS5y_sM71Hc(!<2Z5SOo3U_FtDrD%&JqaG;b zg`H|$yanlC>p)>J3y_APoPvTxU9n*>8h&uv=JhXZ_pu+Vov(A8*H6Vq49~USx3&BI uvBAOsAB@W9qynv=G1FGi*pLO@ug(mxJrL2@s}-zd80GOiOmZ40d0#&j#!93B literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/MYINI.ICO b/VC++Files/winmysqladmin/images/MYINI.ICO new file mode 100644 index 0000000000000000000000000000000000000000..428ed8e92b022e3cdb815530788da671ca44b14a GIT binary patch literal 766 zcmbV~F>b^l5JkU3q|j}uZP#T=OB`TxvmMI~x5!m2rN~us3+IjPI6$#dcHqzO`S6(n zsblp0t31A+q%-vm^xz$IdM4islbABw3Yn$md8WFstW(S4E5PtAPi^E}?L@_j>z~{d za~a$(Y5ka#LkQ_FhFr2Vz#F}34obhffmZi}57GRzb4o~?ymFMZ%YGz9JLH|0GI}NB zSIJ7XOh1LW`~SY}=0qdow|2gX<oY%nwS1g=V8I_)KEc%Bj#UVz(`34U>onT!Yve0g W2LgBjCvX8*a08f+z#sVlMf?D!QHp^8 literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/Myini.bmp b/VC++Files/winmysqladmin/images/Myini.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e743a1b9b321cf7c6de28f506baf3ab4c9d413fc GIT binary patch literal 644 zcmbV`F%Ci@5JU&Dp!5iqmL#-RCN?G(-o^Zyl4E!jZicgf$kOTlzsn8}hP~Xk9cpZ> zC+4xI!JeItgOU;8j~Ls+$`(0it^!K^QHpd-ezGNHjg-`mgHswm>Ij$S;Qd+Z$ADz5 z4d3u-R>4y*d>M|C^L7JN_o2Oua#}PO8yc>fBy=oCf{O!pJ!5i(>8CJ)#++v|7yr-O eV$N7F{p#cmvg+I1(0H8tqj?y-&bZ;pyqY)EvqPl- literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/Noentry.ico b/VC++Files/winmysqladmin/images/Noentry.ico new file mode 100644 index 0000000000000000000000000000000000000000..27f2211f56c524448b7cec644eb1b58680fcf6e1 GIT binary patch literal 766 zcmcIiF%H5o47>soVk#3W9r*=3El*(0#8>i^j*J~aLJD_j+=dFZEI4(Xvwe2!2B^52 zW)I1I1srHk)P{PYR@iU{9An?bG02E>z2VLyLI|`9#PlFWov2)LY5Pe$WlY=&dVe)f z4~Gnc*^#pc#uSg~iBN=7izQsrRlwi)Sy`U{z#k2PrT3f0QSvpxA|Xw5iVH#>xK*(E zXU6b9I0TAC=WUu)SI6k8bR}NE`2id|pq944HUMi=$Llz!mM7biYjsppwbQjzFZHCn E0T5dk!2kdN literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/SETUP.BMP b/VC++Files/winmysqladmin/images/SETUP.BMP new file mode 100644 index 0000000000000000000000000000000000000000..c5794e5ac002c08a15e69c14b7bad84579791535 GIT binary patch literal 86878 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 BW8we+ literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/Setup 16.bmp b/VC++Files/winmysqladmin/images/Setup 16.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e17b06155fb278d7705ec06eb6dd882fc150a353 GIT binary patch literal 86880 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̟h_-)JbQ>UB$Zz29xjtJ;<U3< zUPVhGz0t(+mbop1&YU~*2NXN2K?lFhl)PsvU8`ZM&^KJHU;xJlO4uCW=v4EQxo@cr zY1&EwE+wC;zNslPt9>=>6oy^qq)67t+!}?^`g5Ss?zz^VcDGpqwVBHJP*(T3&@(VR zK2@D%v$i_ncTV*t%Ca^yIlP*U5puc)CMtTUzEHyjlFkGUQijdyP6xl;I|PG;Yw#J% zO(K!M&R2^=aCnW343AbiKjs4$v&Pr>luDy`Sg`&u0ocvhc9o(U7Jxb`o7&uTX}C8} zi}wzVmuCZT3^S`&I$qh}14d2crgpC6Ag?>mTt`>18)>~I;7LHou{z_w^(MvlEKE=0 zU6TEQgL?Y=hsR14^v6?FVdq$P`nv~wph_Sh(QK4M<_D?>b}x3f1a?bcw*+=eV7CNz zOJKJIc1vKl1a?bcw*+=eV7CNzOJKJIc1vKl1a?bcw*+=eV7CNzOJKJI{z^*V{{!e; BW2FE9 literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/Table.ico b/VC++Files/winmysqladmin/images/Table.ico new file mode 100644 index 0000000000000000000000000000000000000000..4469a915b7fac90084a940b1056385f84afb2839 GIT binary patch literal 1078 zcmb_byH3ME5FCd{(8Yg%E0mrBIw)N8GZaB-xQ-JIzvNGGNqG`TSa*__**zb!qL7G) z_07J<ySG}|K!pYBx`xWS0<LJACdcm!;DNa{bDC+03QKCBGrdnafCtWHLroW5*U>5= zb|9i2!ADc7id=Z_ia(A4E0NHn#|i<z#Gh^3D!(+#ZW5fvJhW3xj^dDQx#7p^2tA|j z5V((Sjx(J-L-*7W_e9x~;|}+W<BrI1CuXSW{%ubzKTRY`keh2?s-wgZU$&cDmovr> zvfVu9gz@q!ar0D4Xy2Iruose~kYr$)x1N&NKMm1)`O<=k_e@%xc`HiF?~079A7u=L za+7OGjgRsA&Rlly%k$Wf_Sqfd=e^Xo{p6)YjVG7$#oSN#dw|!P(?!4LBK#?&M@8V7 OxFar!^Z!P<Pwh9}-+3_r literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/Working.ico b/VC++Files/winmysqladmin/images/Working.ico new file mode 100644 index 0000000000000000000000000000000000000000..72faedbbfc52e2ff31c49ae6038f33719f674e86 GIT binary patch literal 766 zcma)4F_OYC4BWuYP`H4KmX!Ak_!)kZdo_Ma$}1@;nA7cAF(k|tD3RpVt|ez;VBj;3 z2grUlz>)czKGHAr0bh(jCilN(l4Np@#K<LTt;{04y>Qox&POGM&n&&ktgH&jY=zBM z0@5pi;6l*og`gBH+b5Ky_I-p27szGghz)%Nm%>JuK$L>T>M0{7ftUh`L!@HhU|5|o zh3y1ZC>0s~k%}5L({Z4)r@3##)UrfDLku&H;}f?pdC?L?t#4@4I#BMjdyRs=jI4=E zd;fn=j(5QQadp3+-ESxNY42Wl?s?1GG59a9$pg6Ff%6SGO~Aeay9{jEWautjS)a&D UC%yJ*zxuR(>Z|^mqj{YB2VRrFssI20 literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/database.ico b/VC++Files/winmysqladmin/images/database.ico new file mode 100644 index 0000000000000000000000000000000000000000..9689aa883610764ff753ffbde688c53f44170847 GIT binary patch literal 1078 zcmd5*J8r`;41JDUL_mNdH;AVqV|FdQNw49p+?3-K&{Dude3XpcGa88co@B!Ynj#%K zls3PQqGXW<Dy+~nTZleaz%%uBTl{?mJk`LSv4;FYuJAw!7;|rv5hP+(6eUgceNQbQ z<rgW*BJ)v5;ybw#;!2}Muj^782H@B_x-ouqr_(9Mh!6}zM-uM6cWsNyjK_5d!b`mg zpX(9l4s$*nH(S=z!eu@A%X%4K)RVugC-)!J8#3`^IuCevBW1UMQwp0hq0~y?%}%6l zId-jNuz8jP>SJ!DT+-CP;@y#2dBx-F8Q2&{jhxGlTE61Dzv46ScEwuTX4-?ZPj1N5 zocFYElZ}Vtd^17PX#8r<bt}gZ96FBju{H10CAv^Y`u@;vJn{H$H5kW%w&MKw635SR k^@;hpNj#Iflk}hP^K?q>OLZ=aawPueEP9u1&9yt=3wSnBSpWb4 literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/find.ico b/VC++Files/winmysqladmin/images/find.ico new file mode 100644 index 0000000000000000000000000000000000000000..2e0f96c52f996b34e252db181bafa0de1f9fbd09 GIT binary patch literal 766 zcmaKoJyOF!429*8iB&K$6&-_1-+>|=B^9R3r0`G~;Ua8Bj=)jk18|7#?1~AUX}mni zo`lRmw0_!^Kk500D8fq9E7E8uMAz6eD248!h^ELy0`_<8h;Y$vH*Cl_QeD?1A^^cI z3PDd0mfq5IHWGh|`_nr4<P+X|`CXsE?410<j5(I$wAt`z9_PF?Tf0lMqTmNRTH-uk zZXPqCIaz;P6st{D9qIzyWm!h#jpwdhRfw^k6|ap~p1RiIt>#bVz{UJHZkncLaNh?B zf#+qpt{C&Ob>g<lTg-xoE*Ur=8pNSv%cML@?R)XRnbvB6*Q3N4=L}Ck2cYpu^=1u9 zb)L`wcX$t+Xi~0)jT$G7fvUg7<;NKR)I*nM41Pm<$U`;s0$qfD8i$UO@YUV+alh!I gu<-P}sOj!qC3IstI-Q;brK%p~v3F1ph5bR%51=vH82|tP literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/green.ico b/VC++Files/winmysqladmin/images/green.ico new file mode 100644 index 0000000000000000000000000000000000000000..ef53cd87994ed6088fff7244f0382c6a4c6944b9 GIT binary patch literal 766 zcmc(cu};J=42FGxbl$iuh_NFhQWi!Y>9(G3GGe$#LCOmtW$NQF_6^GCCTTjb<1}%c z|BwC06*(}5;l%nNKX)QeBJ#o<nD0zKcQdfR%>Y5nieqIf(=_27Sk_OL#dl1GA9=jm zEb>@(Wrb9c0+Ypd1l4iWP7u4Le71HVqSu_hwWc8VEvKB$wFaq=g!xiy;2Q23pm&^_ zv#QuN<u8AeYXH|{P8agminG}`?gWZzj9e>k;evg}_-b7bFodqhJO*EH;2PfaY<Sh9 z_c6X9tLZTarO%~Zy4uz-h#`P)dh`&&^R7R@5V{`qxV;ZO4R3ljy!GcJgwwu15O{y< S&w>D~mdAOI>ks$cf7&nGIuX_Y literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/help.bmp b/VC++Files/winmysqladmin/images/help.bmp new file mode 100644 index 0000000000000000000000000000000000000000..76c6a90d2d8bcedc5bd20b82e47c8e3cd9662ec8 GIT binary patch literal 644 zcmZ`$!41MN3^a%VU;~~!n1CnGO03ftkBq{HJvu;??tv;#P^sM6aZw}THqM=WcANPA z==WmQ!(Xt@b?xK;w6)`gCK0@nl5g;UG7JNDCKh{TS%|RkFhp*aVUFnMtgt-R$Xrw> zt{NcBncf7m23Hdxq3p*nn_&-5K_T~g6Exi9NLW~Ptei!(%A;P#!syyB>ehVp@&Ebt zZFv-gzU4fDeW=jGg2(A=f&CxxKhE<bM<cTPn2c7=hRy+ap^yc)3x~i85ch!qAVBW} a<Gg4wuXdhLv7w9KBCqGEldE*{xqSgWis`%n literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/initsetup.cpp b/VC++Files/winmysqladmin/images/initsetup.cpp new file mode 100644 index 00000000000..d0dd15b059c --- /dev/null +++ b/VC++Files/winmysqladmin/images/initsetup.cpp @@ -0,0 +1,42 @@ +//--------------------------------------------------------------------------- +#include <vcl.h> +#pragma hdrstop + +#include "initsetup.h" +#include "main.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TForm2 *Form2; +//--------------------------------------------------------------------------- +__fastcall TForm2::TForm2(TComponent* Owner) + : TForm(Owner) +{ +} +//--------------------------------------------------------------------------- +void __fastcall TForm2::BitBtn1Click(TObject *Sender) +{ +if ((Edit1->Text).IsEmpty() || (Edit2->Text).IsEmpty()) + Application->MessageBox("Fill the User name and Password text boxs ", "Winmysqladmin 1.0", MB_OK |MB_ICONINFORMATION); + else + { + if(Form1->ForceConnection()) + if(Form1->ForceMySQLInit()) + { + Form1->CreateMyIniFile(); + Form1->CreatingShortCut(); + } + Close(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TForm2::BitBtn2Click(TObject *Sender) +{ + Close(); +} +//--------------------------------------------------------------------------- +void __fastcall TForm2::SpeedButton1Click(TObject *Sender) +{ + Application->HelpCommand(HELP_FINDER,0); +} +//--------------------------------------------------------------------------- diff --git a/VC++Files/winmysqladmin/images/killdb.ico b/VC++Files/winmysqladmin/images/killdb.ico new file mode 100644 index 0000000000000000000000000000000000000000..9689aa883610764ff753ffbde688c53f44170847 GIT binary patch literal 1078 zcmd5*J8r`;41JDUL_mNdH;AVqV|FdQNw49p+?3-K&{Dude3XpcGa88co@B!Ynj#%K zls3PQqGXW<Dy+~nTZleaz%%uBTl{?mJk`LSv4;FYuJAw!7;|rv5hP+(6eUgceNQbQ z<rgW*BJ)v5;ybw#;!2}Muj^782H@B_x-ouqr_(9Mh!6}zM-uM6cWsNyjK_5d!b`mg zpX(9l4s$*nH(S=z!eu@A%X%4K)RVugC-)!J8#3`^IuCevBW1UMQwp0hq0~y?%}%6l zId-jNuz8jP>SJ!DT+-CP;@y#2dBx-F8Q2&{jhxGlTE61Dzv46ScEwuTX4-?ZPj1N5 zocFYElZ}Vtd^17PX#8r<bt}gZ96FBju{H10CAv^Y`u@;vJn{H$H5kW%w&MKw635SR k^@;hpNj#Iflk}hP^K?q>OLZ=aawPueEP9u1&9yt=3wSnBSpWb4 literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/logo.ico b/VC++Files/winmysqladmin/images/logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..9409cad72b69aae2caa27261e26384eec06d679d GIT binary patch literal 2022 zcmcIldpy=x82_qQUiB)M!mH#m3z0%fZn<<5p<D`;+qP2Eg%!5i$hDf1)`c#kFr}5Q zQcIajN+f9}F}3cd8A*zB_IQ2j^O>zb_j^C*{LXp4&pGEg-|zGMUO<X|nre_d)iQuG zjr6E#QkzUo3PS3EoWYV;e<#)dGBL@<_U+p-f4&d4ZrutaBP00v`5`7I29A!7kd~H) zv9U2$uU?G{7s?<jD+_gXb$EG2!NI`+a&mGoG&H2mQpn~7D=RB_czD3v+#I^Py3o<l zfr5epX3m^R>sCQePY+U3Nf3+0(AL(5rluy8m6f5Sqy$ApMKH#YoSclnz(Blu^$LxR zjqvvN#><y4(b3TXCnqPgx3{CNt`0ptJ*cXx!jU6K(An9Ew{PF#_U+rSv$I1<NeN!R z?!lWkZx9(7iI9*Gl$MsFrKJV#?(QfmD#G*U&(Yo84IdvLI6FI|p`ihJd3gv5T7fH9 zt{^--9IdUbShj2#va+&JU0sb!moDMt$voV>dlzM8WiT@{gTKE&;^X5H6%~ch&`|8$ zxd&_3tU+yUEmBfakd%~!qeqXTtE&sPwzlx~^+iBH0J5{Q(bm?6GiT1=+O=!2u&^K= zmLoAS9vK<sWIs)DK7@wGLApmT+}zwKmL%M}caMCN$uAL^nTILf6r4D5g5qz(#*G^( z_5w_wzKt}zh=hcE%$eha*w}c;$m~R1TpS)fdPF>PsHvr3-@bjc*Ctd}R-&S!0=>Px z#NiF3rKO>;u#n<wA<ZJOWXXBh+o$66=_&{WTd;QRTJo!<vx8`#5EvMw(LND~j*h1L z?LvBbI_1j++_`fH=gu8NO-&7rTS>Q8ym;{f`T6(hyb_8(6Z`k?$NBRG*t>Txf`fxe zr>9uCawT$da-gNPj`C<d*@{T39_-$|n>1-5PGX6hLdt<|?Ald>`}ZGE-kySujSXr4 zkTg08YwK|0weO59EM4kJdAfn}Fpap)Kx%3#TwPDW#U&5duRp}uvuCksQyH#aErW@P z3C){Hw<^ldd6eT(q-6tc-MWQ>f&$#Uc@w$0nFtFDLw$Wc@#2nc+v0KP&>^~G4Q9>q zrSSo}V?O170-dpicuqxmc{waC?J3uMs7_p9YU)Zk(TN!|;z--$h=@oh{tlq2sflVK z0i#AGQeB?HlP6C|#{@bv7tPJ>c>K7N>N1A-X$0q8RFj+W?AbHYqzD@}tbnR&81ayS z;^JZ)K75(>-U5C7^~7l?wP1)uJ0!)=Ij8jlAJdS4JyrvalKFIp2@`dV;`M_TFYtfo zpfjgpicLfH1e)tCEF2=`Zaqexsb){sb9J?}w47{WuwaCl%+jS6vnF!$*&`LkXo*DH zrCP>DOBTyWOUoF}nxZOVV`a~bP>SJ`l;oL^iS+Hf>a0A4Vl5R-vEbZo#_R&-x{2I2 z=#3MyX_b3_P>>tx&4)6P<BdyW)h0Qyn>w5)2*r-y37LCeR7RRwhH2ZF_%P=)hS=Js zTP^e%yhJD*Ct$KJlBm6zz}SL`Ki1(UdYq4!vR4+!Gx1<~X8lZp|IFkvG9`H5)K67g zNFSy7fkLLVQG$mu@!bCPH1(HdOsFz$QM;aqnFUJl*-T@y$Gi2LgiLmdxq;`g2|-No z#dLD8kz<bB>mBYO64|fz8>%Yp>%&xJJZ3mYjbI;5;*Lz7;_G{+F=c%-k#M)koMa}j z9ydyr$+vLbm26Cx1m>}eMhaA9=O6g~(^Jm{sw!F<`c8?<3Y4{{^~2OpG#GEno7Xm- zIKReap0h6JuLsQ=uWR}qmkf#&?;Cd;mi*GQo%74(HRk_BIsfz5de7e9zKp(ix3=ol zCl?+K#Isg?{_vYOGZnX{z8!HyanR9$_|z+(oqoJ|SI+Q=C&zcb7{1PTphMUnW$M3U z^vegG7gI*(5BqT-&iRU`XRrQssCY-@SJ&=*oA+;==klo?tp}4D*Q?(e_8)Mc>1#d} hKV1(V9`^y9%*#*mE#Yk+#tGTC|2^FQFZ%!Ye**{&x=a87 literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/multitrg.ico b/VC++Files/winmysqladmin/images/multitrg.ico new file mode 100644 index 0000000000000000000000000000000000000000..76ffbe29c77156ae50e3d648e74bf7220459ce59 GIT binary patch literal 766 zcmaKqy=ucS6h?3Af)+zMbxp>O2Catlk-TNBA5EZD&{xRVF=K}i^?X-$yoAcRvd;ba zt|H59$8$Wsna0nH**otK?1+70J9}j|n~6OiGeIKr++NHqvDs2e1gih6R;@4|xiqzL zKA)#`Z5BYr>IhoNw>TzMUhPq`2W!3I@Pxj6gQb+vG+C9bY4C*3d6d(I<Hmyu6e-cY zVozT<hK-dL5$KhkqZf#U4<0u5{FP&N{pd`@ds6m@yGkjk)syXiprpz5mv+P_?@xDE z$n3ADbmbUK`v;ePFaisYWzd<A%I2429&~=4)X{^56hu{&I3`DR$Q*Yr4bA%H{8#ob zd)?^2RlS8;FMQD1PTYpW-E4p3YyYwlB)SXNPnMb)Z*JF9+u>jHy3}gJ1wC{Q=$+90 NLZ4n8_vhfd{sV;I4oCn1 literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/mysql-07.bmp b/VC++Files/winmysqladmin/images/mysql-07.bmp new file mode 100644 index 0000000000000000000000000000000000000000..dcae23b88137e076df1fc6e0894475932ca867d5 GIT binary patch literal 9618 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 literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/mysql-17.bmp b/VC++Files/winmysqladmin/images/mysql-17.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0291c804006fe21b4a643c42d9a8c537eb0efb78 GIT binary patch literal 3806 zcmeH~yK>_;6o$e34TMCK5(!DB2$2>^Q8uL%nUtPX+oX5ta!Z$6x^%gv$}Ls8beYm+ zN>>>_Lf*jnLCM#dWY&}2nG}0wAc7$9orC`zz~f(k`;(E*e%1-8&^tq$qAA4g#<y<w z*!?Ko2a+TSS*=#&^z@W``0#<8ot=^M^K)`>aX~IGFUe-JA=~Yi+}zxd+uK`mcXvnb z@9)XO!vn@|Fn5c&x0rhe&JC%mEtnU8U!r|MyYA+0K7As8TwjyFuznYtP0srX`8`{a zE7B($v}=-(TeSPrGjiF_$aTLWzaaLH_;yb+a&z^W+-|;*hl?w6b^eiTFR#eM=9+x| zbOk>@?1utB6nL)!{C{gBWvYz6d33Elt*R>hmSCInc0EngS)NwuHw^fvx=vw5QKxei zPX3Gao)`Db8YYUoR!7bAFnT8^?~-LS(iBC}AJ<Tytwp}b=WW|j*M_c1)Ag#-Uisnt zML17idQsPH4eVKnnMk!Axz*>QC~^#`-GC<Q6e*NrweqyO>x5y5XYVyViu)K`&+B?t z6vd*LRb5%Ns+3mfdcK&+_-JDYA=0$Wibej4>vH^&wCP|VIgZnL;@pqo2>ntB%oj$} zBKum)B^DT?;gh1M4o!fU<!q5w&19VC>V9$epmrR`5giPNeQtxkCkHVCrtIhldp=ou zOs%V`<&CU`DwWb^d3{(xie*-Ud&0Rj6ML>@Q#cHgFid*Ea5$j-A?U9BN_{x%F*aUh zdE>e5x)$IzP&2P8T~5IMt3%+LEL)_qGcggqG~ZNEf07#{!9g4k`!e*QtjV6s;v^n0 z#;nrzkgHU3M`LISZkI4qa-nEbB3{Yu%+)p3WrkGVPm&-^TySD1iGxAh<3Siw2mvmo zO#@BSdLeLZn^F|uOM<UM=R<TQw+np7CAMWUlVH;{Ov0YjB8<Z*rd|~FA$H^>(J<_J zjV2{U!KUeaxh%2gYL|9!#UuAQUaoq+=IXYTDnP&iw21mi68D*l-zbWMFhc0fiAZZ% z5;$ZAa&)xI5$EGl<PhSm4qUNZ)m5qHA?bk9gM%<~qBw~>)(hi+CeX!>g9cG83IVJ< z29x7ek?!Oj&q{Q0@x0c7YpP;+x^K(O$umI@qS&U$Ti`Kdl1jb%R?^OL+%R>i@9u&L zEBD;BklcOVp7rIn?)xBezmpq3ZZx!65Dz0yR&)q>GGJkp9Tj5Uj=j-rjY&Q`s=Hek z8O&yBD(eiIzu>yEoL(5^)OIKfhy9+<!X)nbQ4%{|u=2`z>n@F4OdC!oY&EN8P8v~` zBAw!ZH1PZ)Z!eH9x|CZuZ~K7dF=Rd~%VwP|P!I+t;x*5f5}QGDS;)=t1ZVuQexblW z8|5KtnMZN#`ivgsxOR#Kb}d)X<9x9&iXtmTEtRp38IzGucR19+zZng1Pq^~x!49&r z%rc?X^X|qQ!%v6RB$k>hb_^Hw{%$Z$Y?zvs&u!0x)V^u@Hhfto^)1`>x^xEp-QBrf zo1<pD-y-E>yc<okuaHS+?e2}+#85q5!$H<`n|R#N3|n)!rNE(TDjk+S*2-JasP}f{ zY45hi3`3<%a}3QSrmG-G96rT#ENnt~yoR6Ve{IKAsAXs#Q%u!SG~Ll`M|Bn7fCng| zy(z-4rDC3<DYmUBngb;a$B<o@sCX!zivPggL3%ya^>CGWj_<qN_qe<3y1wst+;bgS Ss^7t=JW}7o9xLI!?7sm#*hkj@ literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/mysql.BMP b/VC++Files/winmysqladmin/images/mysql.BMP new file mode 100644 index 0000000000000000000000000000000000000000..ed5c7f9051ffb1a255ab4b637559c09ccb3c4a22 GIT binary patch literal 8760 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 CzIb;4 literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/red.ico b/VC++Files/winmysqladmin/images/red.ico new file mode 100644 index 0000000000000000000000000000000000000000..b28288d576e1416391102cc7333a4eece5c65a2e GIT binary patch literal 766 zcmc(cF;c`Z3`NB*Gp2)zI^zaPW?ay6B+b%Ly4!FAa+@57GB?OR*;ed=9wl;YKUw-# zMDBQ|>51`PeorFLBJzq)_y=zLW*PRkWgsNy`e9^>XIa-3u$Nc%-DWtCZP~imCh}Nk zbtI^fiWM6If>{p`)fiQMLnNGHd<iWDxxoaq8l(=khL;n3oZFi4&Z)UkNiQ)@N*U8& zoCIvU#?9mn0^uojf#m;8>5cmJGMrBs=gXC>zOCV|$GPh{c+(TkDZL}h^(X<{|Iib{ zJcm%STS?KcWyxcIzL(`^=nt5HuIItl*RIF8>p6JSqn2;%4*}QS9|X*^YPr3)z<)SJ G{?%^KRSu>A literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/red22.BMP b/VC++Files/winmysqladmin/images/red22.BMP new file mode 100644 index 0000000000000000000000000000000000000000..a35052afa012614102a613e2d516d1ae6b4a13c0 GIT binary patch literal 2104 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 E0u5V*i2wiq literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/images/see.bmp b/VC++Files/winmysqladmin/images/see.bmp new file mode 100644 index 0000000000000000000000000000000000000000..72fb2c50ec6d22e11180b3158e3da7551b754659 GIT binary patch literal 644 zcmaKoF>ZuF3`M;t+I0~@jzBqQNSSh_++nMbCen&xlnPlCo2iy7<R)-{9D)v%B6TVz z-v%X1ku{95=Y4+$9v*!{79QDQ<;&X84XSnAt=g6dH?{5jKt@Sj*O7<-M7t?Qt*~(E zmZqzb^=mw>`|OKXeCp-0zk)dgxxkD$mcMDU;l+Gc@WE_tm$u&Xla-dZC=RD*CzO)u zcitaQb^Y6W@Zg*y>WvqnI@XA#-}<+qSDuG4;8f{rHFGgP-VMVrGI&2liILN)Dr?5P zG(ke6e8enx{LW?$2!RAB8Ybl~x9`ROW-8SH$D=G5XNNaH0cbp_&n8f+^8^9h;XQMr iq$-7t8YhjJs=vkU#}fbavr6*|(Ys6b<TiWyy#E1@_^8tW literal 0 HcmV?d00001 diff --git a/VC++Files/winmysqladmin/initsetup.cpp b/VC++Files/winmysqladmin/initsetup.cpp new file mode 100644 index 00000000000..0a25b8cb79c --- /dev/null +++ b/VC++Files/winmysqladmin/initsetup.cpp @@ -0,0 +1,40 @@ +//--------------------------------------------------------------------------- +#include <vcl.h> +#pragma hdrstop + +#include "initsetup.h" +#include "main.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TForm2 *Form2; +//--------------------------------------------------------------------------- +__fastcall TForm2::TForm2(TComponent* Owner) + : TForm(Owner) +{ +} +//--------------------------------------------------------------------------- +void __fastcall TForm2::BitBtn1Click(TObject *Sender) +{ + if ((Edit1->Text).IsEmpty() || (Edit2->Text).IsEmpty()) + Application->MessageBox("Fill the User name and Password text boxs ", "Winmysqladmin 1.0", MB_OK |MB_ICONINFORMATION); + else + { + Form1->GetServerFile(); + Form1->CreateMyIniFile(); + Form1->CreatingShortCut(); + + Close(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TForm2::BitBtn2Click(TObject *Sender) +{ + Close(); +} +//--------------------------------------------------------------------------- +void __fastcall TForm2::SpeedButton1Click(TObject *Sender) +{ + Application->HelpCommand(HELP_FINDER,0); +} +//--------------------------------------------------------------------------- diff --git a/VC++Files/winmysqladmin/initsetup.h b/VC++Files/winmysqladmin/initsetup.h new file mode 100644 index 00000000000..28f575198e3 --- /dev/null +++ b/VC++Files/winmysqladmin/initsetup.h @@ -0,0 +1,38 @@ +//--------------------------------------------------------------------------- +#ifndef initsetupH +#define initsetupH +//--------------------------------------------------------------------------- +#include <Classes.hpp> +#include <Controls.hpp> +#include <StdCtrls.hpp> +#include <Forms.hpp> +#include <Buttons.hpp> +#include <ExtCtrls.hpp> +#include <Graphics.hpp> +//--------------------------------------------------------------------------- +class TForm2 : public TForm +{ +__published: // IDE-managed Components + TImage *Image1; + TLabel *Label1; + TLabel *Label4; + TPanel *Panel1; + TLabel *Label5; + TLabel *Label6; + TLabel *Label2; + TEdit *Edit1; + TEdit *Edit2; + TBitBtn *BitBtn1; + TSpeedButton *SpeedButton1; + TBitBtn *BitBtn2; + void __fastcall BitBtn1Click(TObject *Sender); + void __fastcall BitBtn2Click(TObject *Sender); + void __fastcall SpeedButton1Click(TObject *Sender); +private: // User declarations +public: // User declarations + __fastcall TForm2(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TForm2 *Form2; +//--------------------------------------------------------------------------- +#endif diff --git a/VC++Files/winmysqladmin/main.cpp b/VC++Files/winmysqladmin/main.cpp new file mode 100644 index 00000000000..6ca29659255 --- /dev/null +++ b/VC++Files/winmysqladmin/main.cpp @@ -0,0 +1,2529 @@ +//--------------------------------------------------------------------------- +#include <vcl.h> +#pragma hdrstop + +#include "main.h" +#include "initsetup.h" +#include "db.h" + +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +#include <shellapi.h> +#include <registry.hpp> +#include <winsvc.h> +#include <winsock.h> +#include <shlobj.h> +#include <IniFiles.hpp> +#include <dir.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <deque.h> +#include <vector.h> +#include <fstream.h> +#include <iostream.h> +#include <iterator.h> +#include <sstream.h> +#include "mysql.h" +#include <Printers.hpp> + +TForm1 *Form1; +bool i_start, NT; +bool IsForce = false; +bool IsVariables = false; +bool IsProcess = false ; +bool IsDatabases = false; +bool new_line = 0; +bool ya = true; +bool yy = true; +bool rinit = false; +AnsiString vpath; +AnsiString vip; +MYSQL_RES *res_1; +static unsigned long q = 0; +bool preport = false; +bool treport = false; +bool ereport = false; +AnsiString mainroot; +bool IsMySQLNode = false; +MYSQL *MySQL; +//--------------------------------------------------------------------------- +__fastcall TForm1::TForm1(TComponent* Owner) + : TForm(Owner) +{ +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::FormCreate(TObject *Sender) +{ + i_start = true; + IsConnect = false; + if (ParamCount() > 0){ + if (ParamStr(1) == "-h" || ParamStr(1) == "h" ) { + ShowHelp(); Application->Terminate(); } + else if (ParamStr(1) == "-w" || ParamStr(1) == "w") { + i_start = false; ContinueLoad(); } + } + else { + ContinueLoad(); Hide(); GetServerOptions(); } +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::DrawItem(TMessage& Msg) +{ + IconDrawItem((LPDRAWITEMSTRUCT)Msg.LParam); + TForm::Dispatch(&Msg); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::MyNotify(TMessage& Msg) +{ + POINT MousePos; + + switch(Msg.LParam) { + case WM_RBUTTONUP: + if (GetCursorPos(&MousePos)){ + PopupMenu1->PopupComponent = Form1; SetForegroundWindow(Handle); + PopupMenu1->Popup(MousePos.x, MousePos.y);} + else Show(); + break; + case WM_LBUTTONUP: + if (GetCursorPos(&MousePos)){ + PopupMenu1->PopupComponent = Form1; SetForegroundWindow(Handle); + PopupMenu1->Popup(MousePos.x, MousePos.y); } + + ToggleState(); + break; + default: + break; } + + TForm::Dispatch(&Msg); +} +//--------------------------------------------------------------------------- +bool __fastcall TForm1::TrayMessage(DWORD dwMessage) +{ + NOTIFYICONDATA tnd; + PSTR pszTip; + + pszTip = TipText(); + + tnd.cbSize = sizeof(NOTIFYICONDATA); + tnd.hWnd = Handle; + tnd.uID = IDC_MYICON; + tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; + tnd.uCallbackMessage = MYWM_NOTIFY; + + if (dwMessage == NIM_MODIFY){ + tnd.hIcon = IconHandle(); + if (pszTip)lstrcpyn(tnd.szTip, pszTip, sizeof(tnd.szTip)); + else tnd.szTip[0] = '\0'; } + else { tnd.hIcon = NULL; tnd.szTip[0] = '\0'; } + + return (Shell_NotifyIcon(dwMessage, &tnd)); +} +//--------------------------------------------------------------------------- +HANDLE __fastcall TForm1::IconHandle(void) +{ + + if (!NT){ + if (MySQLSignal()){Image3->Visible = false; Image2->Visible = true; + return (Image2->Picture->Icon->Handle); } + else {Image2->Visible = false; Image3->Visible = true; + return (Image3->Picture->Icon->Handle); } + } + else { + if (TheServiceStatus()){Image3->Visible = false; Image2->Visible = true; + return (Image2->Picture->Icon->Handle); } + + else if (MySQLSignal()){Image3->Visible = false; Image2->Visible = true; + return (Image2->Picture->Icon->Handle); } + else {Image2->Visible = false; Image3->Visible = true; + return (Image3->Picture->Icon->Handle); } + } + +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::ToggleState(void) +{ + + TrayMessage(NIM_MODIFY); + if (!NT){ + if (MySQLSignal()){SSW9->Caption = "ShutDown the Server"; + Image3->Visible = false; Image2->Visible = true; } + else {SSW9->Caption = "Start the Server"; + Image2->Visible = false; Image3->Visible = true; } + } + else { + if (TheServiceStart()) { + Standa->Enabled = false; + if (TheServiceStatus()) {RService->Enabled = false; + StopS->Enabled = true; + StopS->Caption = "Stop the Service"; + Image3->Visible = false; + Image2->Visible = true; } + else {RService->Enabled = true; + StopS->Enabled = true; + RService->Caption = "Remove the Service"; + StopS->Caption = "Start the Service"; + Image2->Visible = false; + Image3->Visible = true; } + } + else { + Standa->Enabled = true; + StopS->Enabled = false; + if (MySQLSignal()) { + RService->Enabled = false; + Standa->Caption = "ShutDown the Server Standalone"; + Image3->Visible = false; + Image2->Visible = true; } + + else { + RService->Enabled = true; + RService->Caption = "Install the Service"; + Standa->Caption = "Start the Server Standalone"; + Image2->Visible = false; + Image3->Visible = true; } + + } + + + } + +} +//--------------------------------------------------------------------------- +PSTR __fastcall TForm1::TipText(void) +{ + char* status = StatusLine->SimpleText.c_str(); + return status; + +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::WMQueryEndSession(TWMQueryEndSession &msg) +{ + + + if (!NT) { + + if (MySQLSignal()){ + StatusLine->SimpleText = "Shutdown in progress....."; + Show(); Shutd(); msg.Result = 1; } + else { + StatusLine->SimpleText = "The Server already is down......"; + Show(); msg.Result = 1; Close(); } + } + else { + + Show(); + if (!TheServiceStart()) { if (MySQLSignal()) Shutd(); } + msg.Result = 1; + } + +} + +//--------------------------------------------------------------------------- +LRESULT IconDrawItem(LPDRAWITEMSTRUCT lpdi) +{ + HICON hIcon; + + hIcon = (HICON)LoadImage(g_hinst, MAKEINTRESOURCE(lpdi->CtlID), IMAGE_ICON, + 16, 16, 0); + if (!hIcon) + return(false); + + DrawIconEx(lpdi->hDC, lpdi->rcItem.left, lpdi->rcItem.top, hIcon, + 16, 16, 0, NULL, DI_NORMAL); + + return(true); +} +//--------------------------------------------------------------------------- +AnsiString __fastcall TForm1::TheComputer() +{ + AnsiString theword; + DWORD dwSize = MAX_COMPUTERNAME_LENGTH + 1; + char szBuf[MAX_COMPUTERNAME_LENGTH + 1]; + szBuf[0] = '\0'; + + GetComputerName(szBuf, &dwSize); + theword = (AnsiString) szBuf; + delete [] szBuf; + return theword; + +} +//--------------------------------------------------------------------------- +AnsiString __fastcall TForm1::TheOS() +{ + AnsiString theword; + OSVERSIONINFO info; + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&info); + + switch (info.dwPlatformId) + { + case VER_PLATFORM_WIN32s: + NT = false; + theword = "Win32s detected"; + break; + case VER_PLATFORM_WIN32_WINDOWS: + NT = false; + theword = "Win 95 or Win 98 detected"; + break; + case VER_PLATFORM_WIN32_NT: + NT = true; + theword = "Windows NT detected"; + break; + } + return theword; +} +///--------------------------------------------------------------------------- +AnsiString __fastcall TForm1::TheUser() +{ + AnsiString theword; + DWORD dwSize = 0; + + GetUserName(NULL, &dwSize); + + char *szBuf = new char[dwSize]; + szBuf[0] = '\0'; + + GetUserName(szBuf, &dwSize); + theword = (AnsiString) szBuf; + delete [] szBuf; + return theword; + +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::TakeIP(void) +{ + WORD wVersionRequested; + WSADATA WSAData; + wVersionRequested = MAKEWORD(1,1); + WSAStartup(wVersionRequested,&WSAData); + + hostent *P; + char s[128]; + in_addr in; + char *P2; + gethostname(s, 128); + P = gethostbyname(s); + + Memo2->Lines->Clear(); + Memo2->Lines->Add((AnsiString)P->h_name); + mainroot = P->h_name; + in.S_un.S_un_b.s_b1 = P->h_addr_list[0][0]; + in.S_un.S_un_b.s_b2 = P->h_addr_list[0][1]; + in.S_un.S_un_b.s_b3 = P->h_addr_list[0][2]; + in.S_un.S_un_b.s_b4 = P->h_addr_list[0][3]; + P2 = inet_ntoa(in); + vip = P2; + mainroot += " ( " + (AnsiString)P2 + " )"; + Memo2->Lines->Add(P2); + +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::GetmemStatus(void) +{ + MEMORYSTATUS ms; + ms.dwLength = sizeof(MEMORYSTATUS); + GlobalMemoryStatus(&ms); + + Edit2->Text = AnsiString((double)ms.dwTotalPhys / 1024000.0) + " MB RAM"; +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::ShowHelp(void) +{ + Application->MessageBox("Usage: WinMySQLadmin.EXE [OPTIONS]\n\n-w Run the tool without start the Server.\n-h Shows this message and exit ", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::ContinueLoad(void) +{ + OS->Text = TheOS(); + Localhost->Text = TheComputer(); + Localuser->Text = TheUser(); + GetmemStatus(); + ClearBox(); + TakeIP(); + MyODBC(); + + + IsMyIniUp(); + + if (!NT) { WinNT->Enabled = false; NtVer->Enabled = false; Win9->Enabled = true; } + else { WinNT->Enabled = true; Win9->Enabled = false; } + + if (i_start) + { + // NT never is started from the prompt + if ((!NT) && (!MySQLSignal())) mysqldstart(); + { + TrayMessage(NIM_MODIFY); + SeekErrFile(); + } + } + Hide(); + +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::MyODBC(void) +{ + + TRegistry *Registry = new TRegistry(); + Memo3->Lines->Clear(); + + try + { + Registry->RootKey = HKEY_LOCAL_MACHINE; + // the basic data of myodbc + if (Registry->OpenKey("Software\\ODBC\\ODBCINST.INI\\MySQL", false)) + { + Memo3->Lines->Add("Driver Version\t" + Registry->ReadString("DriverODBCVer")); + Memo3->Lines->Add("Driver\t\t" + Registry->ReadString("Driver")); + Memo3->Lines->Add("API Level\t\t" + Registry->ReadString("APILevel")); + Memo3->Lines->Add("Setup\t\t" + Registry->ReadString("Setup")); + Memo3->Lines->Add("SQL Level\t" + Registry->ReadString("SQLLevel")); + } + else + Memo3->Lines->Add("Not Found"); + + } + catch (...) + { + delete Registry; + } + Memo3->Enabled = false; +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::IsMyIniUp(void) +{ + // we see if the my.ini is Up + AnsiString asFileName = FileSearch("my.ini", TheWinDir()); + if (asFileName.IsEmpty()) + { + IsForce = true; + i_start = false; + QuickSearch(); + } + else + { + Memo1->Enabled = true; + Memo1->Lines->Clear(); + FillMyIni(); + GetBaseDir(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::QuickSearch(void) +{ + AnsiString asFileName = FileSearch("mysql.exe", "c:/mysql/bin"); + if (!asFileName.IsEmpty()) + BaseDir->Text = "c:/mysql"; +} +//--------------------------------------------------------------------------- +AnsiString __fastcall TForm1::TheWinDir() +{ + AnsiString WinDir; + UINT BufferSize = GetWindowsDirectory(NULL,0); + WinDir.SetLength(BufferSize+1); + GetWindowsDirectory(WinDir.c_str(),BufferSize); + char* dirw = WinDir.c_str(); + return dirw ; + +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::FillMyIni(void) +{ + Memo1->Lines->LoadFromFile(TheWinDir() + "\\my.ini"); + +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::GetBaseDir(void) +{ + + char drive[_MAX_DRIVE]; + char dir[_MAX_DIR]; + char file[_MAX_FNAME]; + char ext[_MAX_EXT]; + + + TIniFile *pIniFile = new + TIniFile(TheWinDir() + "\\my.ini"); + + BaseDir->Text = pIniFile->ReadString("mysqld","basedir","") ; + AnsiString lx = pIniFile->ReadString("WinMySQLadmin","Server","") ; + _splitpath((lx).c_str(),drive,dir,file,ext); + AnsiString lw = (AnsiString) file + ext; + + if ( lw == "mysqld-shareware.exe") {ShareVer->Checked = true;} + if ( lw == "mysqld.exe") {MysqldVer->Checked = true;} + if ( lw == "mysqld-opt.exe") {OptVer->Checked = true;} + if ( lw == "mysqld-nt.exe") {NtVer->Checked = true;} + + delete pIniFile; + +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::Showme1Click(TObject *Sender) +{ + if(Showme1->Caption == "Show me") { TrayMessage(NIM_DELETE); + Showme1->Caption = "Hide me"; Show(); } + else { TrayMessage(NIM_ADD); TrayMessage(NIM_MODIFY); + Showme1->Caption = "Show me"; Hide(); } +} +//--------------------------------------------------------------------------- +bool __fastcall TForm1::MySQLSignal() +{ + HANDLE hEventShutdown; + hEventShutdown=OpenEvent(EVENT_MODIFY_STATE, 0, "MySqlShutdown"); + + if(hEventShutdown) + { + CloseHandle(hEventShutdown); + return true; + } + else + { + CloseHandle(hEventShutdown); + return false; + } + +} + +//--------------------------------------------------------------------------- +bool __fastcall TForm1::mysqldstart() +{ + memset(&pi, 0, sizeof(pi)); + memset(&si, 0, sizeof(si)); + si.cb = sizeof(si); + si.dwFlags |= STARTF_USESHOWWINDOW; + si.wShowWindow |= SW_SHOWNORMAL; + + + TIniFile *pIniFile = new + TIniFile(TheWinDir() + "\\my.ini"); + + if (NT) + vpath = pIniFile->ReadString("WinMySQLadmin","Server","") + " --standalone\0" ; + else + vpath = pIniFile->ReadString("WinMySQLadmin","Server","") + "\0" ; + + if ( ! CreateProcess(0,vpath.c_str(), 0, 0, 0, 0, 0, 0, &si,&pi)) + { + TrayMessage(NIM_MODIFY); + return false; + } + else + { + TrayMessage(NIM_MODIFY); + return true; + + } + +} + +//--------------------------------------------------------------------------- +bool __fastcall TForm1::SeekErrFile() +{ + Memo4->Enabled = true; + Memo4->Lines->Clear(); + AnsiString asFileName = FileSearch("mysql.err", BaseDir->Text + "/data"); + if (!asFileName.IsEmpty()) + { + FName = BaseDir->Text + "/data/mysql.err"; + ifstream in((FName).c_str()); + in.seekg(0, ios::end); + string s, line; + deque<string> v; + deque<string> lines; + streampos sp = in.tellg(); + if (sp <= 1000) + in.seekg(0, ios::beg); + else + { + in.seekg(0, ios::beg); + in.seekg((sp - 1000)); + } + + do { + lines.push_back(line); + }while (getline(in, line)); + + + if( lines.size() <= 15) + { + deque<string>::reverse_iterator r; + for(r = lines.rbegin(); r != lines.rend() ; r++) + { + if (ereport) + Memo5->Lines->Add((*r).c_str()); + Memo4->Lines->Add((*r).c_str()); + + } + } + else + { + int k = 0; + deque<string>::reverse_iterator r; + for(r = lines.rbegin(); r != lines.rend(); r++) + { + if (ereport) + Memo5->Lines->Add((*r).c_str()); + Memo4->Lines->Add((*r).c_str()); + if (++k >= 15) { break;} + } + } + in.close(); + return true; + } + else + return false; + +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::Timer1Timer(TObject *Sender) +{ + Showme1->Caption = "Show me"; + TrayMessage(NIM_ADD); + TrayMessage(NIM_MODIFY); + Hide(); + if (IsForce) {Form2->Show();} + Timer1->Enabled = false; +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::GetServerFile() +{ + + AnsiString FileName; + + if(!NT) { + FileName = FileSearch("mysqld-opt.exe", ExtractFilePath(Application->ExeName)); + if (FileName.IsEmpty()) FileName = FileSearch("mysqld.exe", ExtractFilePath(Application->ExeName)); + if (FileName.IsEmpty()) FileName = FileSearch("mysqld-shareware.exe", ExtractFilePath(Application->ExeName)); + + if (!FileName.IsEmpty()){ + if ( FileName == "mysqld-opt.exe") {OptVer->Checked = true;} + if ( FileName == "mysqld.exe") {MysqldVer->Checked= true;} + if ( FileName == "mysqld-shareware.exe") {ShareVer->Checked= true;} } + + } + else { + + FileName = FileSearch("mysqld-nt.exe", ExtractFilePath(Application->ExeName)); + if (FileName.IsEmpty()) FileName = FileSearch("mysqld.exe", ExtractFilePath(Application->ExeName)); + if (FileName.IsEmpty()) FileName = FileSearch("mysqld-shareware.exe", ExtractFilePath(Application->ExeName)); + + if (!FileName.IsEmpty()) { + if ( FileName == "mysqld-nt.exe") {NtVer->Checked = true;} + if ( FileName == "mysqld.exe") {MysqldVer->Checked= true;} + if ( FileName == "mysqld-shareware.exe") {ShareVer->Checked= true;} } + + } +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::CreateMyIniFile(void) +{ + char szFileName[6]; + int iFileHandle; + AnsiString jk; + + Memo1->Enabled = true; + Memo1->Lines->Clear(); + strcpy(szFileName,"\\my.ini"); + iFileHandle = FileCreate(TheWinDir() + szFileName ); + + jk = "#This File was made using the WinMySQLadmin 1.0 Tool\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#" + Now() + "\n\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#Uncomment or Add only the keys that you know how works.\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#Read the MySQL Manual for instructions\n\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + + jk = "[mysqld]\n\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "basedir=" + TheDir() + "\n"; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#bind-address=" + vip + "\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#datadir=" + TheDir() + "/data\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#language=" + TheDir() + "/share/your language directory\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#delay-key-write-for-all-tables\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#log-long-format\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#slow query log=#\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#tmpdir=#\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#ansi\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#new\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#port=3306\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#safe\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#skip-name-resolve\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#skip-networking\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#skip-new\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#skip-host-cache\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#set-variable = key_buffer=16M\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#set-variable = max_allowed_packet=1M\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#set-variable = thread_stack=128K\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#set-variable = flush_time=1800\n\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "[mysqldump]\n\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#quick\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#set-variable = max_allowed_packet=16M\n\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "[mysql]\n\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#no-auto-rehash\n\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "[isamchk]\n\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "#set-variable= key=16M\n\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "[WinMySQLadmin]\n\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + + if (ShareVer->Checked) { jk = "Server=" + TheDir() + "/bin/mysqld-shareware.exe\n\n";} + if (MysqldVer->Checked) {jk = "Server=" + TheDir() + "/bin/mysqld.exe\n\n";} + if (OptVer->Checked) {jk = "Server=" + TheDir() + "/bin/mysqld-opt.exe\n\n";} + if (NtVer->Checked) {jk = "Server=" + TheDir() + "/bin/mysqld-nt.exe\n\n";} + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "user=" + Form2->Edit1->Text + "\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + jk = "password=" + Form2->Edit2->Text + "\n" ; + FileWrite(iFileHandle, (jk).c_str(), (jk).Length()); + + FileClose(iFileHandle); + FillMyIni(); + +} + +//--------------------------------------------------------------------------- +bool __fastcall TForm1::CreatingShortCut() +{ + // Where is The Start Menu in this Machine ? + LPITEMIDLIST pidl; + LPMALLOC pShellMalloc; + char szDir[MAX_PATH + 16]; + AnsiString file; + AnsiString jk = "\\WinMySQLadmin.lnk" ; + + if(SUCCEEDED(SHGetMalloc(&pShellMalloc))) + { + if(SUCCEEDED(SHGetSpecialFolderLocation(NULL, + CSIDL_STARTUP, &pidl))) + { + if(!SHGetPathFromIDList(pidl, szDir)) + { + pShellMalloc->Release(); + pShellMalloc->Free(pidl); + return false; + } + + pShellMalloc->Free(pidl); + } + + pShellMalloc->Release(); + StrCat(szDir, jk.c_str()); + } + + // the create + + IShellLink* pLink; + IPersistFile* pPersistFile; + + if(SUCCEEDED(CoInitialize(NULL))) + { + if(SUCCEEDED(CoCreateInstance(CLSID_ShellLink, NULL, + CLSCTX_INPROC_SERVER, + IID_IShellLink, (void **) &pLink))) + { + + pLink->SetPath((ExtractFilePath(Application->ExeName) + "WinMySQLadmin.exe").c_str()); + pLink->SetDescription("WinMySQLadmin Tool"); + pLink->SetShowCmd(SW_SHOW); + + if(SUCCEEDED(pLink->QueryInterface(IID_IPersistFile, + (void **)&pPersistFile))) + { + + WideString strShortCutLocation(szDir); + pPersistFile->Save(strShortCutLocation.c_bstr(), TRUE); + pPersistFile->Release(); + } + pLink->Release(); + } + + CoUninitialize(); + } + + + return true; +} + +//--------------------------------------------------------------------------- +AnsiString __fastcall TForm1::TheDir() +{ + AnsiString buffer; + char s[_MAX_PATH + 1]; + + StrCopy(s, ( BaseDir->Text).c_str()) ; + + for (int i = 0; s[i] != NULL; i++) + if (s[i] != '\\') + buffer += s[i]; + else + buffer += "/"; + + return buffer; + +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::SpeedButton1Click(TObject *Sender) +{ + Application->HelpCommand(HELP_FINDER,0); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::Timer2Timer(TObject *Sender) +{ + ToggleState(); + +} +//--------------------------------------------------------------------------- +bool __fastcall TForm1::TheServiceStart() +{ + bool thatok; + char *SERVICE_NAME = "MySql"; + SC_HANDLE myService, scm; + scm = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS | GENERIC_WRITE); + if (scm) + { + myService = OpenService(scm, SERVICE_NAME, SERVICE_ALL_ACCESS); + if (myService) + thatok = true; + else + thatok = false; + } + CloseServiceHandle(myService); + CloseServiceHandle(scm); + return thatok; +} + +//--------------------------------------------------------------------------- +bool __fastcall TForm1::TheServicePause() +{ + + bool thatok; + char *SERVICE_NAME = "MySql"; + SC_HANDLE myService, scm; + scm = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS); + + if (scm) + { + myService = OpenService(scm, SERVICE_NAME, SERVICE_ALL_ACCESS); + if (myService) + { + // stop the service + if (IsConnect) + { + mysql_kill(MySQL,mysql_thread_id(MySQL)); + StatusLine->SimpleText = ""; + q = 0; + } + + + SERVICE_STATUS ss; + thatok = ControlService(myService, + SERVICE_CONTROL_STOP, + &ss); + + } + else + thatok = false; + } + else + thatok = false; + + CloseServiceHandle(myService); + CloseServiceHandle(scm); + return thatok; +} +//--------------------------------------------------------------------------- +bool __fastcall TForm1::TheServiceResume() +{ + + bool thatok; + char *SERVICE_NAME = "MySql"; + SC_HANDLE myService, scm; + scm = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS); + + if (scm) + { + myService = OpenService(scm, SERVICE_NAME, SERVICE_ALL_ACCESS); + if (myService) + { + // start the service + + thatok = StartService(myService, 0, NULL); + } + else + thatok = false; + } + else + thatok = false; + + CloseServiceHandle(myService); + CloseServiceHandle(scm); + return thatok; +} +//--------------------------------------------------------------------------- +bool __fastcall TForm1::TheServiceStatus() +{ + bool thatok; + bool k; + char *SERVICE_NAME = "MySql"; + SC_HANDLE myService, scm; + SERVICE_STATUS ss; + DWORD dwState = 0xFFFFFFFF; + scm = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS); + + if (scm) + { + myService = OpenService(scm, SERVICE_NAME, SERVICE_ALL_ACCESS); + if (myService) + { + memset(&ss, 0, sizeof(ss)); + k = QueryServiceStatus(myService,&ss); + if (k) + { + dwState = ss.dwCurrentState; + if (dwState == SERVICE_RUNNING) + thatok = true; + } + else + thatok = false; + } + else + thatok = false; + } + else + thatok = false; + + CloseServiceHandle(myService); + CloseServiceHandle(scm); + return thatok; +} +//--------------------------------------------------------------------------- +bool __fastcall TForm1::TheServiceCreate() + +{ + bool thatok; + char *SERVICE_NAME = "MySql"; + char *szFullPath = vpath.c_str(); + SC_HANDLE myService, scm; + scm = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS); + + if (scm) + { myService = CreateService( + scm, + SERVICE_NAME, + SERVICE_NAME, + SERVICE_ALL_ACCESS, + SERVICE_WIN32_OWN_PROCESS, + SERVICE_AUTO_START , + SERVICE_ERROR_NORMAL, + szFullPath, + NULL, + NULL, + NULL, + NULL, + NULL); + + if (myService) + thatok = true; + else + thatok = false; + + } + + CloseServiceHandle(myService); + CloseServiceHandle(scm); + return thatok; + +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::Swin9Click(TObject *Sender) +{ + if(Application->MessageBox("Shutdown this tool", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) + Close(); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::SSW9Click(TObject *Sender) +{ + if (MySQLSignal()) + { + if(Application->MessageBox("Shutdown the MySQL Server ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) + { + + if (Shutd()) + { + IsConnect = false; + IsVariables = false; + IsProcess = false; + IsDatabases = false; + ya = false; + ClearBox(); + Sleep(500); + TrayMessage(NIM_MODIFY); + + } + else + Application->MessageBox("Fails to Shutdown the Server", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); + } + } + else + { + if(Application->MessageBox("Start the MySQL Server ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) + { + if (mysqldstart()) + { + TrayMessage(NIM_MODIFY); + ya = true; + } + else + Application->MessageBox("Fails to Start the Server", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); + + } + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::ShutDownBoth1Click(TObject *Sender) +{ + if (MySQLSignal()) + { + if(Application->MessageBox("Shutdown the MySQL Server and this tool ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) + { + + if (Shutd()) + Close(); + else + { + Application->MessageBox("Fails to Shutdown the Server", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); + + } + } + } + else + if(Application->MessageBox("Shutdown this tool ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) + Close(); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::ShutDownthisTool1Click(TObject *Sender) +{ + if(Application->MessageBox("Shutdown this tool ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) + Close(); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::StopSClick(TObject *Sender) +{ + AnsiString theWarning; + theWarning = "Are you sure to stop the Service ?\n\nAll the connections will be loss !" ; + if (TheServiceStatus()) + { + if(Application->MessageBox(theWarning.c_str(), "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) + { + if (TheServicePause()) + { + TrayMessage(NIM_MODIFY); + IsConnect = false; + IsVariables = false; + IsProcess = false; + IsDatabases = false; + ya = false; + ClearBox(); + + } + else + Application->MessageBox("Fails to stop the Service", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); + + } + } + else + { + if(Application->MessageBox("Start the Service Manager for the MySQL Server ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) + { + if (TheServiceResume()) + { + ya = true; + TrayMessage(NIM_MODIFY); + } + else + Application->MessageBox("Fails to start the Service", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); + } + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::RServiceClick(TObject *Sender) +{ + if (TheServiceStart()) + { + if(Application->MessageBox("Remove the MySQL Server service ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) + { + if (!TheServiceRemove()) + Application->MessageBox("Fails to Remove The MySQL Server Service", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); + } + } + else + { + if(Application->MessageBox("Install the MySQL Server service ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) + { + if (!TheServerPath()) + Application->MessageBox("Please create first the my.ini setup", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); + else + { + if (!TheServiceCreate()) + Application->MessageBox("Fails to Install The MySQL Server Service", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); + } + + } + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::StandaClick(TObject *Sender) +{ + if (MySQLSignal()) + { + if(Application->MessageBox("Shutdown the MySQL Server ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) + { + if (Shutd()) + { + IsConnect = false; + IsVariables = false; + IsProcess = false; + IsDatabases = false; + ya = false; + ClearBox(); + Sleep(500); + TrayMessage(NIM_MODIFY); + + } + else + Application->MessageBox("Fails to Shutdown the Server", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); + } + } + else + { + if(Application->MessageBox("Start the MySQL Server ", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) + { + if (mysqldstart()) + { + StatusLine->SimpleText = ""; + TrayMessage(NIM_MODIFY); + + } + else + Application->MessageBox("Fails to Start the Server", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); + } + } +} +//--------------------------------------------------------------------------- +bool __fastcall TForm1::Shutd() +{ + // from Irena + HANDLE hEventShutdown; + hEventShutdown=OpenEvent(EVENT_MODIFY_STATE, 0, "MySqlShutdown"); + + if (IsConnect) + { + mysql_kill(MySQL,mysql_thread_id(MySQL)); + mysql_shutdown(MySQL); + StatusLine->SimpleText = ""; + + } + + q = 0; + + + if(hEventShutdown) + { + SetEvent(hEventShutdown); + CloseHandle(hEventShutdown); + TrayMessage(NIM_MODIFY); + IsConnect = false; + return true; + } + else + { + TrayMessage(NIM_MODIFY); + return false; + } + +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::ClearBox(void) +{ + + st22->Text = ""; + st23->Text = ""; + st24->Text = ""; + st25->Text = ""; + st26->Text = ""; + st27->Text = ""; + st28->Text = ""; + st29->Text = ""; + Edit3->Text = ""; + Edit4->Text = ""; + Edit5->Text = ""; + Edit6->Text = ""; + +} +//--------------------------------------------------------------------------- +bool __fastcall TForm1::TheServiceRemove() +{ + bool thatok; + char *SERVICE_NAME = "MySql"; + SC_HANDLE myService, scm; + scm = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS); + if (scm) + { + myService = OpenService(scm, SERVICE_NAME, SERVICE_ALL_ACCESS); + if (myService) + { + if(DeleteService(myService)) + { + CloseServiceHandle(myService); + CloseServiceHandle(scm); + thatok = true; + } + else + { + CloseServiceHandle(myService); + CloseServiceHandle(scm); + thatok = false; + } + + } + else + { + CloseServiceHandle(myService); + CloseServiceHandle(scm); + thatok = false; + } + } + else + { + thatok = false; + CloseServiceHandle(scm); + } + + return thatok; + +} +//--------------------------------------------------------------------------- +bool __fastcall TForm1::TheServerPath() +{ + + TIniFile *pIniFile = new + TIniFile(TheWinDir() + "\\my.ini"); + + vpath = pIniFile->ReadString("WinMySQLadmin","Server","") ; + delete pIniFile; + if (vpath.IsEmpty()) + return false; + else + return true; + +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::Button5Click(TObject *Sender) +{ + if (!SeekErrFile()) + Application->MessageBox("Fails to find mysql.err", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::IsMySQLInit(void) +{ + AnsiString theCommand; + char *host = NULL,*password=0,*user=0 ; + TIniFile *pIniFile = new + TIniFile(TheWinDir() + "\\my.ini"); + + AnsiString MyUser = pIniFile->ReadString("WinMySQLadmin","user","") ; + AnsiString MyPass = pIniFile->ReadString("WinMySQLadmin","password","") ; + + delete pIniFile; + + + if (!MyUser.IsEmpty() && MyUser.Length() && !MyPass.IsEmpty() && MyPass.Length()) + { + if (!IsConnect) + { + + MySQL = mysql_init(MySQL); + if (mysql_real_connect(MySQL, "localhost",(MyUser).c_str(), (MyPass).c_str() , 0, 0, NULL, 0)) + IsConnect = true; + else + { + if(mysql_real_connect(MySQL,host,user,password , 0, 0, NULL, 0)) + { + IsConnect = true; + theCommand = "GRANT ALL PRIVILEGES ON *.* TO "; + theCommand += "'" + MyUser + "' @localhost IDENTIFIED BY "; + theCommand += "'" + MyPass + "' with GRANT OPTION"; + char* los = theCommand.c_str(); + if(!mysql_query(MySQL, los )) + StatusLine->SimpleText = " "; + } + + } + + } + + } + else + { + if (!IsConnect) + { + MySQL = mysql_init(MySQL); + if(mysql_real_connect(MySQL,host,user,password , 0, 0, NULL, 0)) + IsConnect = true; + } + } +} + +//--------------------------------------------------------------------------- + +void __fastcall TForm1::Timer3Timer(TObject *Sender) +{ + if ((NT) && TheServiceStatus()) {IsMySQLInit(); } + + if ((NT) && !TheServiceStatus() && MySQLSignal()) {IsMySQLInit(); } + + if (!(NT) && MySQLSignal()) {IsMySQLInit(); } + + if (IsConnect) + { + GetServerStatus(); + if (!IsMySQLNode) + GetMainRoot(); + Extended->Enabled = true; + if (!IsProcess && !GetProcess()) + StatusLine->SimpleText = ""; + if (!IsVariables && !GetVariables()) + StatusLine->SimpleText = ""; + Timer3->Interval = 10000; + } + else + Extended->Enabled = false; +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::GetServerStatus(void) +{ + + GetExtendedStatus(); + Edit3->Text = mysql_get_server_info(MySQL); + Edit4->Text = mysql_get_host_info(MySQL); + Edit5->Text = mysql_get_client_info(); + Edit6->Text = mysql_get_proto_info(MySQL); + + +} + +//--------------------------------------------------------------------------- +bool __fastcall TForm1::GetProcess() +{ + MYSQL_RES *res; + MYSQL_ROW row; + unsigned int i; + int k = 0; + int therow = 1; + new_line=1; + + StringGrid2->RowCount= 2; + + if (!(res=mysql_list_processes(MySQL))) + { + return false; + } + + while ((row=mysql_fetch_row(res)) != 0) + { + mysql_field_seek(res,0); + StringGrid2->Cells[0][0] = "PID"; + StringGrid2->Cells[1][0] = "User"; + StringGrid2->Cells[2][0] = "Host"; + StringGrid2->Cells[3][0] = "DB"; + StringGrid2->Cells[4][0] = "Command"; + StringGrid2->Cells[5][0] = "Time"; + StringGrid2->Cells[6][0] = "State"; + StringGrid2->Cells[7][0] = "Info"; + for (i=0 ; i < mysql_num_fields(res); i++) + { + + if (k <= 6 ) + { + StringGrid2->Cells[k][therow] = row[i]; + k++; + } + else + { + + StringGrid2->Cells[(k)][therow] = row[i]; + k = 0; + therow++ ; + StringGrid2->RowCount++; + + } + + } + + } + + StringGrid2->RowCount--; + mysql_free_result(res); + StringGrid5->RowCount--; + IsProcess = true; + return true; + +} +//--------------------------------------------------------------------------- +bool __fastcall TForm1::GetVariables() +{ + MYSQL_RES *res; + MYSQL_ROW row; + unsigned int i; + int k = 1; + new_line=1; + bool left = true; + AnsiString report; + StringGrid1->RowCount = 2; + if (mysql_query(MySQL,"show variables") || + !(res=mysql_store_result(MySQL))) + { + return false; + } + + while ((row=mysql_fetch_row(res)) != 0) + { + mysql_field_seek(res,0); + + StringGrid1->Cells[0][0] = "Variable Name"; + StringGrid1->Cells[1][0] = "Value"; + + + for (i=0 ; i < mysql_num_fields(res); i++) + { + + if (left) + { + if (treport) + report = GetString(row[i]); + StringGrid1->Cells[0][k++] = row[i]; + left = false; + } + else + { + if (treport) + Memo5->Lines->Add(report + row[i]); + StringGrid1->RowCount++; + StringGrid1->Cells[1][--k] = row[i]; + k++; + left = true; + } + + } + + } + + StringGrid1->RowCount--; + mysql_free_result(res); + IsVariables = true; + return true; +} +//--------------------------------------------------------------------------- +bool __fastcall TForm1::nice_time(AnsiString buff) +{ + + unsigned long sec; + unsigned long tmp; + AnsiString mytime; + + sec = StrToInt(buff); + + if (sec >= 3600L*24) + { + tmp=sec/(3600L*24); + sec-=3600L*24*tmp; + + mytime = IntToStr(tmp); + if (tmp > 1) + mytime+= " days "; + else + mytime+= " day "; + + } + + if (sec >= 3600L) + { + tmp=sec/3600L; + sec-=3600L*tmp; + mytime += IntToStr(tmp); + if (tmp > 1) + mytime+= " hours "; + else + mytime+= " hour "; + } + if (sec >= 60) + { + tmp=sec/60; + sec-=60*tmp; + mytime += IntToStr(tmp); + mytime+= " min "; + + } + mytime += IntToStr(sec); + mytime+= " sec "; + st29->Text = mytime ; + return true; +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::Button11Click(TObject *Sender) +{ + if (IsConnect) + { + if (GetVariables()) + StatusLine->SimpleText = ""; + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::Button10Click(TObject *Sender) +{ + if (IsConnect) + { + if (GetProcess()) + StatusLine->SimpleText = ""; + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::Button6Click(TObject *Sender) +{ + if (IsConnect) + { + if (mysql_refresh(MySQL,REFRESH_HOSTS)) + StatusLine->SimpleText = ""; + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::Button7Click(TObject *Sender) +{ + if (IsConnect) + { + if (mysql_refresh(MySQL,REFRESH_LOG)) + StatusLine->SimpleText = ""; + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::Button8Click(TObject *Sender) +{ + if (IsConnect) + { + if (mysql_refresh(MySQL,REFRESH_TABLES)) + StatusLine->SimpleText = ""; + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::Button2Click(TObject *Sender) +{ + Memo1->Enabled = true; + Memo1->Lines->Clear(); + AnsiString asFileName = FileSearch("my.ini", TheWinDir()); + if (asFileName.IsEmpty()) + Application->MessageBox("Don't found my.ini file on the Win Directory", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION); + else + FillMyIni(); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::Button3Click(TObject *Sender) +{ + TIniFile *pIniFile = new + TIniFile(TheWinDir() + "\\my.ini"); + + if (!Memo1->GetTextLen()) + Application->MessageBox("The Memo Box is Empty", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION); + else + { + if(Application->MessageBox("Are you sure to write the modifications into My.ini file.", "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) + { + Memo1->Lines->SaveToFile(TheWinDir() + "\\my.ini"); + + Memo1->Lines->Clear(); + Memo1->Enabled = true; + Memo1->Lines->Clear(); + if (NtVer->Checked) + pIniFile->WriteString("WinMySQLadmin","Server",TheDir() + "/bin/mysqld-nt.exe"); + if (MysqldVer->Checked == true) + pIniFile->WriteString("WinMySQLadmin","Server", TheDir() + "/bin/mysqld.exe"); + if (ShareVer->Checked) + pIniFile->WriteString("WinMySQLadmin","Server",TheDir() + "/bin/mysqld-shareware.exe"); + if (OptVer->Checked) + pIniFile->WriteString("WinMySQLadmin","Server", TheDir() + "/bin/mysqld-opt.exe"); + FillMyIni(); + Application->MessageBox("My.ini was modificated", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION); + } + + } + delete pIniFile; + Memo1->Lines->Clear(); + FillMyIni(); + +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::Button1Click(TObject *Sender) +{ + if(CreatingShortCut()) + Application->MessageBox("The ShortCut on Start Menu was created", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION); + else + Application->MessageBox("Fails the Operation of Create the ShortCut", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::SpeedButton2Click(TObject *Sender) +{ + BROWSEINFO info; + char szDir[MAX_PATH]; + char szDisplayName[MAX_PATH]; + LPITEMIDLIST pidl; + LPMALLOC pShellMalloc; + + + if(SHGetMalloc(&pShellMalloc) == NO_ERROR) + { + + memset(&info, 0x00,sizeof(info)); + info.hwndOwner = Handle; + info.pidlRoot = 0; + info.pszDisplayName = szDisplayName; + info.lpszTitle = "Search MySQL Base Directory"; + info.ulFlags = BIF_RETURNONLYFSDIRS; + info.lpfn = 0; + + pidl = SHBrowseForFolder(&info); + + if(pidl) + { + + if(SHGetPathFromIDList(pidl, szDir)) {BaseDir->Text = szDir; } + + pShellMalloc->Free(pidl); + } + pShellMalloc->Release(); + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::Button4Click(TObject *Sender) +{ + if (IsConnect) + { + Memo3->Lines->Add(mysql_stat(MySQL)); + } +} +//--------------------------------------------------------------------------- + + +void __fastcall TForm1::SpeedButton3Click(TObject *Sender) +{ + if(Showme1->Caption == "Show me") { TrayMessage(NIM_DELETE); + Showme1->Caption = "Hide me"; Show(); } + else { TrayMessage(NIM_ADD); TrayMessage(NIM_MODIFY); + Showme1->Caption = "Show me"; Hide(); } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::ExtendedClick(TObject *Sender) +{ +if (ya) + { + Extended->Caption = "Start Extended Server Status"; + ya = false; + ClearBox(); + } +else + { + Extended->Caption = "Stop Extended Server Status"; + ya = true; + } +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::GetServerOptions(void) +{ +AnsiString FileName; +FileName = FileSearch("mysqld-opt.exe", ExtractFilePath(Application->ExeName)); +if (FileName.IsEmpty()) {OptVer->Enabled = false; } + +FileName = FileSearch("mysqld-shareware.exe", ExtractFilePath(Application->ExeName)); +if (FileName.IsEmpty()) {ShareVer->Enabled = false; } + +FileName = FileSearch("mysqld.exe", ExtractFilePath(Application->ExeName)); +if (FileName.IsEmpty()) {MysqldVer->Enabled = false; } + +FileName = FileSearch("mysqld-nt.exe", ExtractFilePath(Application->ExeName)); +if (FileName.IsEmpty()) {NtVer->Enabled = false; } + +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::GetReportServer(void) +{ + + AnsiString strspace; + Memo5->Lines->Clear(); + Memo5->Lines->Add("This Report was made using the WinMySQLadmin 1.0 Tool"); + Memo5->Lines->Add(""); + Memo5->Lines->Add(Now()); + Memo5->Lines->Add(""); + + preport = true; + Memo5->Lines->Add(""); + Memo5->Lines->Add("Server Status Values"); + Memo5->Lines->Add(""); + Memo5->Lines->Add(GetString("Server Info") + mysql_get_server_info(MySQL)); + Memo5->Lines->Add(GetString("Host Info") + mysql_get_host_info(MySQL)); + Memo5->Lines->Add(GetString("Client Info") + mysql_get_client_info()); + Memo5->Lines->Add(GetString("Proto Info") + mysql_get_proto_info(MySQL)); + GetExtendedStatus(); + preport = false; + treport = true; + Memo5->Lines->Add(""); + Memo5->Lines->Add("Variables Values"); + Memo5->Lines->Add(""); + GetVariables(); + treport = false; + ereport = true; + Memo5->Lines->Add(""); + Memo5->Lines->Add("Last Lines from Err File"); + Memo5->Lines->Add(""); + SeekErrFile(); + ereport = false; + +} + +void __fastcall TForm1::SpeedButton4Click(TObject *Sender) +{ + if(IsConnect) + GetReportServer(); + else + Application->MessageBox("The Server must be connected", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::SpeedButton5Click(TObject *Sender) +{ + AnsiString PathName; + SaveFileDialog->FileName = PathName; + if (SaveFileDialog->Execute() ){ + PathName= SaveFileDialog->FileName; + Caption = ExtractFileName(PathName); + Memo5->Lines->SaveToFile(PathName); + Memo5->Modified = false; + } +} +//--------------------------------------------------------------------------- +String __fastcall TForm1::GetString(String k) +{ + int i = 35 - k.Length(); + for (int y = 1 ; y <= i ;y++ ) + k+= " "; + return k ; +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::SpeedButton6Click(TObject *Sender) +{ + PrinterSetupDialog1->Execute(); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::SpeedButton7Click(TObject *Sender) +{ + AnsiString PathName; + if (PrintDialog1->Execute()){ + try { + Memo5->Print(PathName); + } + catch(...){ + Printer()->EndDoc(); + throw; + } + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::SpeedButton8Click(TObject *Sender) +{ + Memo5->CutToClipboard(); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::SpeedButton9Click(TObject *Sender) +{ + Memo5->CopyToClipboard(); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::SpeedButton10Click(TObject *Sender) +{ + + Memo5->PasteFromClipboard(); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::SpeedButton11Click(TObject *Sender) +{ + Memo5->ClearSelection(); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::SpeedButton12Click(TObject *Sender) +{ + Memo5->SelectAll(); +} +//--------------------------------------------------------------------------- +bool __fastcall TForm1::GetMainRoot() +{ + + MYSQL_RES *res; + MYSQL_ROW row; + unsigned int i; + AnsiString command; + + CleanGrid(); + CleanGridI(); + TakeIP(); + + MySQLNode = DBView->Items->Add(NULL, mainroot.UpperCase()); + MySQLNode->ImageIndex = 0; + + if (!(res=mysql_list_dbs(MySQL,"%"))) { return false; } + while ((row=mysql_fetch_row(res)) != 0) { + mysql_field_seek(res,0); + + for (i=0 ; i < mysql_num_fields(res); i++) + { + MySQLDbs = DBView->Items->AddChild(MySQLNode, row[i]); + MySQLDbs->ImageIndex = 1; + MySQLDbs->SelectedIndex = 1; + + + } + + } + + mysql_free_result(res); + MySQLNode->Expanded = true; + + + + + IsMySQLNode = true; + return true; + +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::DeleteDatabaseSClick(TObject *Sender) +{ + AnsiString alert; + if (IsConnect) + { + if(DBView->Selected == MySQLNode ) + Application->MessageBox("Invalid database row selected.", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); + else if ( DBView->Selected == NULL ) + Application->MessageBox("Invalid database row selected.", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); + else + { + if (DBView->Selected->Text.UpperCase() == "MYSQL") + Application->MessageBox("You cann't use this tool to drop the MySQL Database.", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); + else { + alert = "Are you sure to drop the < "; + alert+= DBView->Selected->Text.c_str(); + alert+= " > database."; + if(Application->MessageBox(alert.c_str(), "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) + { + char* lese = DBView->Selected->Text.c_str(); + if (!mysql_drop_db(MySQL, lese )) + { + DBView->Items->Clear(); + GetMainRoot(); + } + else + Application->MessageBox("Fails to drop the Database.", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); + } + } + } + } + else + Application->MessageBox("The Server must be connected", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); +} +//--------------------------------------------------------------------------- + bool __fastcall TForm1::IsDatabase(String Name) +{ + MYSQL_RES *res; + MYSQL_ROW row; + unsigned int i; + AnsiString command; + + + CleanTree(); + command = "use "; + command+= Name.c_str(); + char* das = command.c_str(); + char* lis = Name.c_str(); + if (mysql_query(MySQL, das ) || + !(res=mysql_list_tables(MySQL,"%"))) + return false; + + MySQLNodeT = TableView->Items->Add(NULL, lis); + MySQLNodeT->ImageIndex = 1; + MySQLNodeT->SelectedIndex = 1; + while ((row=mysql_fetch_row(res)) != 0) { + mysql_field_seek(res,0); + + for (i=0 ; i < mysql_num_fields(res); i++) + { + + MySQLTbs = TableView->Items->AddChild(MySQLNodeT, row[i]); + MySQLTbs->ImageIndex = 2; + MySQLTbs->SelectedIndex = 2; + } + MySQLNodeT->Expanded = true; + } + mysql_free_result(res); + return true; +} +//--------------------------------------------------------------------------- + + +void __fastcall TForm1::DBViewClick(TObject *Sender) +{ + + if (IsConnect) + { + if (DBView->Selected != MySQLNode && DBView->Selected != NULL ) + { + IsDatabase(DBView->Selected->Text); + + } + else + { + CleanTree(); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::TableViewClick(TObject *Sender) +{ + if (IsConnect) + { + if (DBView->Selected != MySQLNodeT ) + { + IsTable(TableView->Selected->Text); + IsIndex(TableView->Selected->Text); + + } + else + { + CleanGrid(); + CleanGridI(); + + } + } +} +//--------------------------------------------------------------------------- + bool __fastcall TForm1::IsTable(String Name) +{ + MYSQL_RES *res; + MYSQL_ROW row; + unsigned int i; + int k = 0; + int therow = 1; + new_line=1; + AnsiString command; + AnsiString commandt; + + CleanGrid(); + CleanGridI(); + command = "use "; + command+= DBView->Selected->Text.c_str(); + char* las = command.c_str(); + + commandt = "desc "; + commandt+= Name.c_str(); + char* les = commandt.c_str(); + + if (mysql_query(MySQL, las )) + return false; + + if (mysql_query(MySQL, les ) || + !(res=mysql_store_result(MySQL))) + return false ; + + StringGrid4->Cells[0][0] = "Field"; + StringGrid4->Cells[1][0] = "Type"; + StringGrid4->Cells[2][0] = "Null"; + StringGrid4->Cells[3][0] = "Key"; + StringGrid4->Cells[4][0] = "Default"; + StringGrid4->Cells[5][0] = "Extra"; + StringGrid4->Cells[6][0] = "Previleges"; + + + int thecounter; + String u = GetNumberServer(); + if ( u == "3.22") + { + StringGrid3->ColCount = 7; + thecounter = 4; + } + else + thecounter = 5; + + while ((row=mysql_fetch_row(res)) != 0) + { + mysql_field_seek(res,0); + + for (i=0 ; i < mysql_num_fields(res); i++) + { + if (k <= thecounter ) + { + StringGrid4->Cells[k][therow] = row[i]; + k++; + } + else + { + StringGrid4->Cells[(k)][therow] = row[i]; + k = 0; + therow++ ; + StringGrid4->RowCount++; + } + } + + } + StringGrid4->RowCount--; + mysql_free_result(res); + return true; +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::TableViewChange(TObject *Sender, TTreeNode *Node) +{ +if (IsConnect) + { + if (DBView->Selected != MySQLNodeT ) + { + IsTable(TableView->Selected->Text); + IsIndex(TableView->Selected->Text); + + } + else + { + CleanGrid(); + CleanGridI(); + + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::DBViewChange(TObject *Sender, TTreeNode *Node) +{ + if (IsConnect) + { + if (DBView->Selected != MySQLNode ) + { + IsDatabase(DBView->Selected->Text); + + } + else + { + CleanTree(); + } + } + +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::RefreshSClick(TObject *Sender) +{ + MYSQL_RES *res; + MYSQL_ROW row; + unsigned int i; + AnsiString command; + + if (IsConnect) + { + IsMySQLNode = false; + CleanTree(); + DBView->Items->Clear(); + + TakeIP(); + + MySQLNode = DBView->Items->Add(NULL, mainroot.UpperCase()); + MySQLNode->ImageIndex = 0; + + if (!(res=mysql_list_dbs(MySQL,"%"))) { /*do nothing;*/ } + while ((row=mysql_fetch_row(res)) != 0) { + mysql_field_seek(res,0); + + for (i=0 ; i < mysql_num_fields(res); i++) + { + MySQLDbs = DBView->Items->AddChild(MySQLNode, row[i]); + MySQLDbs->ImageIndex = 1; + MySQLDbs->SelectedIndex = 1; + + } + + } + + mysql_free_result(res); + + IsMySQLNode = true; + + MySQLNode->Expanded = true; + + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::CreateDatabaseSClick(TObject *Sender) +{ + + if (IsConnect) + { + dbfrm->Show(); + + } + else + ShowMessage("Precisa estar conectado"); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::CleanTree(void) +{ + StringGrid4->RowCount= 2; + StringGrid4->Cells[0][1] = ""; + StringGrid4->Cells[1][1] = ""; + StringGrid4->Cells[2][1] = ""; + StringGrid4->Cells[3][1] = ""; + StringGrid4->Cells[4][1] = ""; + StringGrid4->Cells[5][1] = ""; + TableView->Items->Clear(); + +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::CleanGrid(void) +{ + StringGrid4->RowCount= 2; + StringGrid4->Cells[0][1] = ""; + StringGrid4->Cells[1][1] = ""; + StringGrid4->Cells[2][1] = ""; + StringGrid4->Cells[3][1] = ""; + StringGrid4->Cells[4][1] = ""; + StringGrid4->Cells[5][1] = ""; +} +//--------------------------------------------------------------------------- +bool __fastcall TForm1::CreatingDB() +{ + + if (mysql_create_db(MySQL, dbfrm->Edit1->Text.c_str())) + return true; + else + return false; +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::OutRefresh(void) +{ + RefreshSClick(dbfrm->SpeedButton1); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::FlushHosts1Click(TObject *Sender) +{ + if (IsConnect) + { + if (mysql_refresh(MySQL,REFRESH_HOSTS)) + StatusLine->SimpleText = ""; + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::FlushLogs1Click(TObject *Sender) +{ + if (IsConnect) + { + if (mysql_refresh(MySQL,REFRESH_LOG)) + StatusLine->SimpleText = ""; + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::FlushTables1Click(TObject *Sender) +{ + if (IsConnect) + { + if (mysql_refresh(MySQL,REFRESH_TABLES)) + StatusLine->SimpleText = ""; + } +} +//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- + bool __fastcall TForm1::IsIndex(String Name) +{ + MYSQL_RES *res; + MYSQL_ROW row; + unsigned int i; + int k = 0; + int therow = 1; + new_line=1; + AnsiString command; + AnsiString commandt; + i = 0; + CleanGridI(); + command = "use "; + command+= DBView->Selected->Text.c_str(); + char* las = command.c_str(); + + commandt = "show index from "; + commandt+= Name.c_str(); + char* les = commandt.c_str(); + + if (mysql_query(MySQL, las )) + return false; + + if (mysql_query(MySQL, les ) || + !(res=mysql_store_result(MySQL))) + return false ; + + StringGrid3->RowCount= 2; + StringGrid3->Cells[0][0] = "Table"; + StringGrid3->Cells[1][0] = "Non_unique"; + StringGrid3->Cells[2][0] = "Key_name"; + StringGrid3->Cells[3][0] = "Seq_in_index"; + StringGrid3->Cells[4][0] = "Col_name"; + StringGrid3->Cells[5][0] = "Collation"; + StringGrid3->Cells[6][0] = "Card."; + StringGrid3->Cells[7][0] = "Sub_part"; + StringGrid3->Cells[8][0] = "Packed"; + StringGrid3->Cells[9][0] = "Comment"; + + int thecounter; + String u = GetNumberServer(); + + if ( u == "3.22") + { + StringGrid3->ColCount = 8; + thecounter = 6; + } + else + thecounter = 8; + while ((row=mysql_fetch_row(res)) != 0) + { + mysql_field_seek(res,0); + + for (i=0 ; i < mysql_num_fields(res); i++) + { + if (k <= thecounter ) + { + StringGrid3->Cells[k][therow] = row[i]; + k++; + } + else + { + StringGrid3->Cells[(k)][therow] = row[i]; + k = 0; + therow++ ; + StringGrid3->RowCount++; + } + } + + } + if (i) + StringGrid3->RowCount--; + mysql_free_result(res); + return true; +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::CleanGridI(void) +{ + StringGrid3->RowCount= 2; + StringGrid3->Cells[0][1] = ""; + StringGrid3->Cells[1][1] = ""; + StringGrid3->Cells[2][1] = ""; + StringGrid3->Cells[3][1] = ""; + StringGrid3->Cells[4][1] = ""; + StringGrid3->Cells[5][1] = ""; + StringGrid3->Cells[6][1] = ""; + StringGrid3->Cells[7][1] = ""; +} +//--------------------------------------------------------------------------- +bool __fastcall TForm1::CreatingTable(String TheTable) +{ + + if (!mysql_query(MySQL, TheTable.c_str())) + return true; + else + return false; +} +//--------------------------------------------------------------------------- +bool __fastcall TForm1::GetExtendedStatus() +{ + if (!ya && !preport) + return true; + + MYSQL_RES *res; + MYSQL_ROW row; + unsigned int i; + int k = 1; + new_line=1; + bool left = true; + bool open_tables = false; + bool open_files = false; + bool uptime = false; + bool running_threads = false; + bool open_streams = false; + bool slow_queries = false; + bool opened_tables = false; + bool questions = false; + + AnsiString report; + if (yy) + StringGrid5->RowCount = 2; + + if (mysql_query(MySQL,"show status") || + !(res=mysql_store_result(MySQL))) + { + return false; + } + + while ((row=mysql_fetch_row(res)) != 0) + { + mysql_field_seek(res,0); + + StringGrid5->Cells[0][0] = "Variable Name"; + StringGrid5->Cells[1][0] = "Value"; + + + for (i=0 ; i < mysql_num_fields(res); i++) + { + + if (left) + { + if (preport) + report = GetString(row[i]); + if ( (String) row[i] == "Open_tables") + open_tables = true; + else + open_tables = false; + if ( (String) row[i] == "Open_files") + open_files = true; + else + open_files = false; + if ((String) row[i] == "Uptime") + uptime = true; + else + uptime = false; + + if ( (String) row[i] == "Opened_tables") + opened_tables = true; + else + opened_tables = false; + + if ( (String) row[i] == "Threads_running" || (String) row[i] == "Running_threads") + running_threads = true; + else + running_threads = false; + + if ( (String) row[i] == "Open_streams") + open_streams = true; + else + open_streams = false; + + if ( (String) row[i] == "Slow_queries") + slow_queries = true; + else + slow_queries = false; + + if ( (String) row[i] == "Questions") + questions = true; + else + questions = false; + + if (yy) + StringGrid5->Cells[0][k++] = row[i]; + + left = false; + } + else + { + if (preport) + Memo5->Lines->Add(report + row[i]); + if (open_tables) + st22->Text = row[i]; + if (open_files) + st23->Text = row[i]; + if (uptime) + nice_time(row[i]); + if (running_threads) + st27->Text = row[i]; + if (open_streams) + st24->Text = row[i]; + if (slow_queries) + st28->Text = row[i]; + if (opened_tables) + st25->Text = row[i]; + if (questions){ + q++; + st26->Text = StrToInt64(row[i]) - q; } + + if (yy){ + StringGrid5->RowCount++; + StringGrid5->Cells[1][--k] = row[i]; + k++; } + + left = true; + } + + } + + } + + + if (rinit) + StringGrid5->RowCount--; + mysql_free_result(res); + yy = false; + return true; +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::SpeedButton13Click(TObject *Sender) +{ + yy = true; + // rinit = true; +} +//--------------------------------------------------------------------------- +String __fastcall TForm1::GetNumberServer() +{ + String TheVersion; + + TheVersion = mysql_get_server_info(MySQL) ; + TheVersion.SetLength(4); + return TheVersion; + + +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::KillProcess1Click(TObject *Sender) +{ + + if (IsConnect) + KillPID(); + else + Application->MessageBox("The Server must be connected", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); +} +//--------------------------------------------------------------------------- +bool __fastcall TForm1::KillPID() +{ + String s = "Are you sure to kill the process PID no. "; + s+= StringGrid2->Cells[0][StringGrid2->Row]; + s+= " of the USER "; + s+= StringGrid2->Cells[1][StringGrid2->Row]; + unsigned long xx = mysql_thread_id(MySQL); + unsigned long yy = StrToInt(StringGrid2->Cells[0][StringGrid2->Row]); + if ( xx != yy) + { + if(Application->MessageBox(s.c_str(), "WinMySQLadmin 1.0", MB_YESNOCANCEL | MB_ICONQUESTION ) == IDYES) + { + if (!mysql_kill(MySQL,yy)) + { + GetProcess(); + return true; + } + } + } + else + { + Application->MessageBox("From here you can't kill the PID of this tool", "WinMySQLadmin 1.0", MB_OK | MB_ICONEXCLAMATION); + return true; + } + return true; +} +void __fastcall TForm1::FlushThreads1Click(TObject *Sender) +{ + if (IsConnect) + { + if (mysql_refresh(MySQL,REFRESH_THREADS)) + StatusLine->SimpleText = ""; + } +} +//--------------------------------------------------------------------------- + diff --git a/VC++Files/winmysqladmin/main.h b/VC++Files/winmysqladmin/main.h new file mode 100644 index 00000000000..dcb8ad60d7b --- /dev/null +++ b/VC++Files/winmysqladmin/main.h @@ -0,0 +1,314 @@ +//--------------------------------------------------------------------------- +#ifndef mainH +#define mainH +//--------------------------------------------------------------------------- +#include <Classes.hpp> +#include <Controls.hpp> +#include <StdCtrls.hpp> +#include <Forms.hpp> +#include <Buttons.hpp> +#include <ComCtrls.hpp> +#include <ExtCtrls.hpp> +#include <Graphics.hpp> +#include <Grids.hpp> +#include <ImgList.hpp> +#include <Menus.hpp> +#include <Dialogs.hpp> +#include <string.h> + +#define MYWM_NOTIFY (WM_APP+100) +#define IDC_MYICON 1006 +extern HINSTANCE g_hinst; +LRESULT IconDrawItem(LPDRAWITEMSTRUCT lpdi); +//--------------------------------------------------------------------------- +class TForm1 : public TForm +{ +__published: // IDE-managed Components + TStatusBar *StatusLine; + TPanel *Panel1; + TImage *Image1; + TLabel *Label1; + TLabel *Label2; + TLabel *Label3; + TLabel *Label8; + TImage *Image3; + TImage *Image2; + TPageControl *PageControl1; + TTabSheet *TabSheet1; + TSpeedButton *SpeedButton1; + TGroupBox *GroupBox1; + TLabel *Label4; + TLabel *Label5; + TLabel *Label6; + TLabel *Label14; + TLabel *Label17; + TEdit *Localhost; + TEdit *Localuser; + TEdit *OS; + TMemo *Memo2; + TEdit *Edit2; + TGroupBox *GroupBox2; + TMemo *Memo3; + TGroupBox *GroupBox3; + TLabel *Label13; + TLabel *Label15; + TLabel *Label16; + TLabel *Label7; + TLabel *Label47; + TLabel *Label44; + TLabel *Label42; + TLabel *Label45; + TEdit *Edit3; + TEdit *Edit4; + TEdit *Edit5; + TEdit *Edit6; + TEdit *st29; + TEdit *st27; + TEdit *st25; + TEdit *st28; + TTabSheet *TabSheet2; + TTabSheet *TabSheet3; + TLabel *Label18; + TSpeedButton *SpeedButton2; + TEdit *BaseDir; + TMemo *Memo1; + TRadioGroup *RadioGroup1; + TRadioButton *ShareVer; + TRadioButton *MysqldVer; + TRadioButton *OptVer; + TRadioButton *NtVer; + TButton *Button2; + TButton *Button3; + TButton *Button1; + TTabSheet *TabSheet4; + TMemo *Memo4; + TButton *Button5; + TTabSheet *TabSheet5; + TStringGrid *StringGrid1; + TButton *Button11; + TTabSheet *TabSheet6; + TStringGrid *StringGrid2; + TButton *Button10; + TPopupMenu *PopupMenu1; + TMenuItem *Showme1; + TMenuItem *N1; + TMenuItem *Win9; + TMenuItem *Swin9; + TMenuItem *N3; + TMenuItem *SSW9; + TMenuItem *N4; + TMenuItem *ShutDownBoth1; + TMenuItem *N2; + TMenuItem *WinNT; + TMenuItem *ShutDownthisTool1; + TMenuItem *N5; + TMenuItem *StopS; + TMenuItem *N6; + TMenuItem *RService; + TMenuItem *N7; + TMenuItem *Standa; + TImageList *ImageList1; + TTimer *Timer1; + TTimer *Timer2; + TTimer *Timer3; + TSpeedButton *SpeedButton3; + TSpeedButton *Extended; + TLabel *Label9; + TEdit *st26; + TLabel *Label43; + TEdit *st24; + TLabel *Label41; + TEdit *st23; + TLabel *Label40; + TEdit *st22; + TLabel *Label39; + TTabSheet *TabSheet8; + TSaveDialog *SaveFileDialog; + TPrinterSetupDialog *PrinterSetupDialog1; + TPrintDialog *PrintDialog1; + TRichEdit *Memo5; + TGroupBox *GroupBox5; + TSpeedButton *SpeedButton4; + TSpeedButton *SpeedButton5; + TSpeedButton *SpeedButton7; + TSpeedButton *SpeedButton6; + TGroupBox *GroupBox6; + TSpeedButton *SpeedButton8; + TSpeedButton *SpeedButton9; + TSpeedButton *SpeedButton10; + TSpeedButton *SpeedButton11; + TSpeedButton *SpeedButton12; + TTabSheet *TabSheet9; + TImageList *ImageList2; + TPopupMenu *PopupMenu2; + TMenuItem *CreateDatabaseS; + TMenuItem *DeleteDatabaseS; + TMenuItem *RefreshS; + TMenuItem *N8; + TMenuItem *N9; + TMenuItem *N10; + TGroupBox *GroupBox7; + TTreeView *DBView; + TGroupBox *GroupBox8; + TTreeView *TableView; + TGroupBox *GroupBox9; + TStringGrid *StringGrid4; + TMenuItem *FlushHosts1; + TMenuItem *N11; + TMenuItem *FlushLogs1; + TMenuItem *N12; + TMenuItem *FlushTables1; + TGroupBox *GroupBox10; + TStringGrid *StringGrid3; + TImage *Image5; + TStringGrid *StringGrid5; + TSpeedButton *SpeedButton13; + TPopupMenu *PopupMenu4; + TMenuItem *KillProcess1; + TMenuItem *N13; + TMenuItem *FlushThreads1; + void __fastcall FormCreate(TObject *Sender); + void __fastcall Showme1Click(TObject *Sender); + void __fastcall Timer1Timer(TObject *Sender); + void __fastcall SpeedButton1Click(TObject *Sender); + void __fastcall Timer2Timer(TObject *Sender); + void __fastcall Swin9Click(TObject *Sender); + void __fastcall SSW9Click(TObject *Sender); + void __fastcall ShutDownBoth1Click(TObject *Sender); + void __fastcall ShutDownthisTool1Click(TObject *Sender); + void __fastcall StopSClick(TObject *Sender); + void __fastcall RServiceClick(TObject *Sender); + void __fastcall StandaClick(TObject *Sender); + void __fastcall Button5Click(TObject *Sender); + void __fastcall Timer3Timer(TObject *Sender); + void __fastcall Button11Click(TObject *Sender); + void __fastcall Button10Click(TObject *Sender); + void __fastcall Button6Click(TObject *Sender); + void __fastcall Button7Click(TObject *Sender); + void __fastcall Button8Click(TObject *Sender); + + void __fastcall Button2Click(TObject *Sender); + void __fastcall Button3Click(TObject *Sender); + void __fastcall Button1Click(TObject *Sender); + void __fastcall SpeedButton2Click(TObject *Sender); + void __fastcall Button4Click(TObject *Sender); + void __fastcall SpeedButton3Click(TObject *Sender); + void __fastcall ExtendedClick(TObject *Sender); + void __fastcall SpeedButton4Click(TObject *Sender); + void __fastcall SpeedButton5Click(TObject *Sender); + void __fastcall SpeedButton6Click(TObject *Sender); + void __fastcall SpeedButton7Click(TObject *Sender); + void __fastcall SpeedButton8Click(TObject *Sender); + void __fastcall SpeedButton9Click(TObject *Sender); + void __fastcall SpeedButton10Click(TObject *Sender); + void __fastcall SpeedButton11Click(TObject *Sender); + void __fastcall SpeedButton12Click(TObject *Sender); + void __fastcall DeleteDatabaseSClick(TObject *Sender); + void __fastcall DBViewClick(TObject *Sender); + void __fastcall TableViewClick(TObject *Sender); + void __fastcall TableViewChange(TObject *Sender, TTreeNode *Node); + void __fastcall DBViewChange(TObject *Sender, TTreeNode *Node); + + void __fastcall RefreshSClick(TObject *Sender); + void __fastcall CreateDatabaseSClick(TObject *Sender); + void __fastcall FlushHosts1Click(TObject *Sender); + void __fastcall FlushLogs1Click(TObject *Sender); + void __fastcall FlushTables1Click(TObject *Sender); + void __fastcall SpeedButton13Click(TObject *Sender); + void __fastcall KillProcess1Click(TObject *Sender); + void __fastcall FlushThreads1Click(TObject *Sender); + + + + + + + +private: // User declarations + void __fastcall DrawItem(TMessage& Msg); + void __fastcall MyNotify(TMessage& Msg); + bool __fastcall TrayMessage(DWORD dwMessage); + HANDLE __fastcall IconHandle(void); + void __fastcall ToggleState(void); + PSTR __fastcall TipText(void); + void __fastcall WMQueryEndSession(TWMQueryEndSession &msg); + AnsiString __fastcall TheComputer(); + AnsiString __fastcall TheUser(); + AnsiString __fastcall TheOS(); + void __fastcall TakeIP(void); + void __fastcall GetmemStatus(void); + void __fastcall ShowHelp(void); + void __fastcall ContinueLoad(void); + void __fastcall MyODBC(void); + void __fastcall IsMyIniUp(void); + void __fastcall QuickSearch(void); + AnsiString __fastcall TheWinDir(); + void __fastcall FillMyIni(void); + void __fastcall GetBaseDir(void); + bool __fastcall MySQLSignal(); + bool __fastcall mysqldstart(); + bool __fastcall SeekErrFile(); + AnsiString __fastcall TheDir(); + bool __fastcall TheServiceStart(); + bool __fastcall TheServicePause(); + bool __fastcall TheServiceResume(); + bool __fastcall TheServiceStatus(); + bool __fastcall TheServiceCreate(); + bool __fastcall TheServiceRemove(); + bool __fastcall Shutd(); + void __fastcall ClearBox(void); + bool __fastcall TheServerPath(); + void __fastcall GetServerOptions(void); + void __fastcall GetReportServer(void); + + + TFileStream *MyFile; + String FName; + + void __fastcall IsMySQLInit(void); + void __fastcall GetServerStatus(void); + bool __fastcall GetExtendedStatus(); + bool __fastcall GetProcess(); + bool __fastcall GetVariables(); + bool __fastcall nice_time(AnsiString buff); + String __fastcall GetString(String k); + String __fastcall GetNumberServer(); + // pointers for database screen + TTreeNode *MySQLNode, *MySQLDbs, *MySQLNodeT, *MySQLTbs; + + bool __fastcall GetMainRoot(); + bool __fastcall IsDatabase(String Name); + bool __fastcall IsTable(String Name); + void __fastcall CleanTree(void); + void __fastcall CleanGrid(void); + bool __fastcall IsIndex(String Name); + void __fastcall CleanGridI(void); + bool __fastcall KillPID(); + + + +public: // User declarations + __fastcall TForm1(TComponent* Owner); + void __fastcall GetServerFile(void); + void __fastcall CreateMyIniFile(void); + bool __fastcall CreatingShortCut(); + bool __fastcall CreatingDB(); + void __fastcall OutRefresh(void); + bool __fastcall CreatingTable(String TheTable); + + bool IsConnect ; + + + + STARTUPINFO si; + PROCESS_INFORMATION pi; + BEGIN_MESSAGE_MAP + MESSAGE_HANDLER(WM_DRAWITEM,TMessage,DrawItem) + MESSAGE_HANDLER(MYWM_NOTIFY,TMessage,MyNotify) + MESSAGE_HANDLER(WM_QUERYENDSESSION,TWMQueryEndSession,WMQueryEndSession) + END_MESSAGE_MAP(TForm) +}; +//--------------------------------------------------------------------------- +extern PACKAGE TForm1 *Form1; +//--------------------------------------------------------------------------- +#endif diff --git a/VC++Files/winmysqladmin/mysql.h b/VC++Files/winmysqladmin/mysql.h new file mode 100644 index 00000000000..e83babb8fa8 --- /dev/null +++ b/VC++Files/winmysqladmin/mysql.h @@ -0,0 +1,293 @@ +/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA */ + +/* defines for the libmysql library */ + +#ifndef _mysql_h +#define _mysql_h + +#ifndef MYSQL_SERVER +#ifdef __cplusplus +extern "C" { +#endif +#endif + +#ifndef _global_h /* If not standard header */ +#include <sys/types.h> +typedef char my_bool; +#if (defined(_WIN32) || defined(_WIN64)) && !defined(__WIN__) +#define __WIN__ +#endif +#if !defined(__WIN__) +#define STDCALL +#else +#define STDCALL __stdcall +#endif +typedef char * gptr; + +#ifndef ST_USED_MEM_DEFINED +#define ST_USED_MEM_DEFINED +typedef struct st_used_mem { /* struct for once_alloc */ + struct st_used_mem *next; /* Next block in use */ + unsigned int left; /* memory left in block */ + unsigned int size; /* size of block */ +} USED_MEM; +typedef struct st_mem_root { + USED_MEM *free; + USED_MEM *used; + unsigned int min_malloc; + unsigned int block_size; + void (*error_handler)(void); +} MEM_ROOT; +#endif + +#ifndef my_socket_defined +#ifdef __WIN__ +#define my_socket SOCKET +#else +typedef int my_socket; +#endif +#endif +#endif +#include "mysql_com.h" +#include "mysql_version.h" + +extern unsigned int mysql_port; +extern char *mysql_unix_port; + +#define IS_PRI_KEY(n) ((n) & PRI_KEY_FLAG) +#define IS_NOT_NULL(n) ((n) & NOT_NULL_FLAG) +#define IS_BLOB(n) ((n) & BLOB_FLAG) +#define IS_NUM(t) ((t) <= FIELD_TYPE_INT24 || (t) == FIELD_TYPE_YEAR) + +typedef struct st_mysql_field { + char *name; /* Name of column */ + char *table; /* Table of column if column was a field */ + char *def; /* Default value (set by mysql_list_fields) */ + enum enum_field_types type; /* Type of field. Se mysql_com.h for types */ + unsigned int length; /* Width of column */ + unsigned int max_length; /* Max width of selected set */ + unsigned int flags; /* Div flags */ + unsigned int decimals; /* Number of decimals in field */ +} MYSQL_FIELD; + +typedef char **MYSQL_ROW; /* return data as array of strings */ +typedef unsigned int MYSQL_FIELD_OFFSET; /* offset to current field */ + +#if defined(NO_CLIENT_LONG_LONG) +typedef unsigned long my_ulonglong; +#elif defined (__WIN__) +typedef unsigned __int64 my_ulonglong; +#else +typedef unsigned long long my_ulonglong; +#endif + +#define MYSQL_COUNT_ERROR (~(my_ulonglong) 0) + +typedef struct st_mysql_rows { + struct st_mysql_rows *next; /* list of rows */ + MYSQL_ROW data; +} MYSQL_ROWS; + +typedef MYSQL_ROWS *MYSQL_ROW_OFFSET; /* offset to current row */ + +typedef struct st_mysql_data { + my_ulonglong rows; + unsigned int fields; + MYSQL_ROWS *data; + MEM_ROOT alloc; +} MYSQL_DATA; + +struct st_mysql_options { + unsigned int connect_timeout,client_flag; + my_bool compress,named_pipe; + unsigned int port; + char *host,*init_command,*user,*password,*unix_socket,*db; + char *my_cnf_file,*my_cnf_group, *charset_dir, *charset_name; + my_bool use_ssl; /* if to use SSL or not */ + char *ssl_key; /* PEM key file */ + char *ssl_cert; /* PEM cert file */ + char *ssl_ca; /* PEM CA file */ + char *ssl_capath; /* PEM directory of CA-s? */ +}; + +enum mysql_option { MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS, + MYSQL_OPT_NAMED_PIPE, MYSQL_INIT_COMMAND, + MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP, + MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME}; + +enum mysql_status { MYSQL_STATUS_READY,MYSQL_STATUS_GET_RESULT, + MYSQL_STATUS_USE_RESULT}; + +typedef struct st_mysql { + NET net; /* Communication parameters */ + gptr connector_fd; /* ConnectorFd for SSL */ + char *host,*user,*passwd,*unix_socket,*server_version,*host_info, + *info,*db; + unsigned int port,client_flag,server_capabilities; + unsigned int protocol_version; + unsigned int field_count; + unsigned int server_status; + unsigned long thread_id; /* Id for connection in server */ + my_ulonglong affected_rows; + my_ulonglong insert_id; /* id if insert on table with NEXTNR */ + my_ulonglong extra_info; /* Used by mysqlshow */ + unsigned long packet_length; + enum mysql_status status; + MYSQL_FIELD *fields; + MEM_ROOT field_alloc; + my_bool free_me; /* If free in mysql_close */ + my_bool reconnect; /* set to 1 if automatic reconnect */ + struct st_mysql_options options; + char scramble_buff[9]; + struct charset_info_st *charset; + unsigned int server_language; +} MYSQL; + + +typedef struct st_mysql_res { + my_ulonglong row_count; + unsigned int field_count, current_field; + MYSQL_FIELD *fields; + MYSQL_DATA *data; + MYSQL_ROWS *data_cursor; + MEM_ROOT field_alloc; + MYSQL_ROW row; /* If unbuffered read */ + MYSQL_ROW current_row; /* buffer to current row */ + unsigned long *lengths; /* column lengths of current row */ + MYSQL *handle; /* for unbuffered reads */ + my_bool eof; /* Used my mysql_fetch_row */ +} MYSQL_RES; + +/* Functions to get information from the MYSQL and MYSQL_RES structures */ +/* Should definitely be used if one uses shared libraries */ + +my_ulonglong STDCALL mysql_num_rows(MYSQL_RES *res); +unsigned int STDCALL mysql_num_fields(MYSQL_RES *res); +my_bool STDCALL mysql_eof(MYSQL_RES *res); +MYSQL_FIELD *STDCALL mysql_fetch_field_direct(MYSQL_RES *res, + unsigned int fieldnr); +MYSQL_FIELD * STDCALL mysql_fetch_fields(MYSQL_RES *res); +MYSQL_ROWS * STDCALL mysql_row_tell(MYSQL_RES *res); +unsigned int STDCALL mysql_field_tell(MYSQL_RES *res); + +unsigned int STDCALL mysql_field_count(MYSQL *mysql); +my_ulonglong STDCALL mysql_affected_rows(MYSQL *mysql); +my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql); +unsigned int STDCALL mysql_errno(MYSQL *mysql); +char * STDCALL mysql_error(MYSQL *mysql); +char * STDCALL mysql_info(MYSQL *mysql); +unsigned long STDCALL mysql_thread_id(MYSQL *mysql); +const char * STDCALL mysql_character_set_name(MYSQL *mysql); + +MYSQL * STDCALL mysql_init(MYSQL *mysql); +#ifdef HAVE_OPENSSL +int STDCALL mysql_ssl_set(MYSQL *mysql, const char *key, + const char *cert, const char *ca, + const char *capath); +char * STDCALL mysql_ssl_cipher(MYSQL *mysql); +int STDCALL mysql_ssl_clear(MYSQL *mysql); +#endif /* HAVE_OPENSSL */ +MYSQL * STDCALL mysql_connect(MYSQL *mysql, const char *host, + const char *user, const char *passwd); +my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user, + const char *passwd, const char *db); +#if MYSQL_VERSION_ID >= 32200 +MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host, + const char *user, + const char *passwd, + const char *db, + unsigned int port, + const char *unix_socket, + unsigned int clientflag); +#else +MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host, + const char *user, + const char *passwd, + unsigned int port, + const char *unix_socket, + unsigned int clientflag); +#endif +void STDCALL mysql_close(MYSQL *sock); +int STDCALL mysql_select_db(MYSQL *mysql, const char *db); +int STDCALL mysql_query(MYSQL *mysql, const char *q); +int STDCALL mysql_real_query(MYSQL *mysql, const char *q, + unsigned int length); +int STDCALL mysql_create_db(MYSQL *mysql, const char *DB); +int STDCALL mysql_drop_db(MYSQL *mysql, const char *DB); +int STDCALL mysql_shutdown(MYSQL *mysql); +int STDCALL mysql_dump_debug_info(MYSQL *mysql); +int STDCALL mysql_refresh(MYSQL *mysql, + unsigned int refresh_options); +int STDCALL mysql_kill(MYSQL *mysql,unsigned long pid); +int STDCALL mysql_ping(MYSQL *mysql); +char * STDCALL mysql_stat(MYSQL *mysql); +char * STDCALL mysql_get_server_info(MYSQL *mysql); +char * STDCALL mysql_get_client_info(void); +char * STDCALL mysql_get_host_info(MYSQL *mysql); +unsigned int STDCALL mysql_get_proto_info(MYSQL *mysql); +MYSQL_RES * STDCALL mysql_list_dbs(MYSQL *mysql,const char *wild); +MYSQL_RES * STDCALL mysql_list_tables(MYSQL *mysql,const char *wild); +MYSQL_RES * STDCALL mysql_list_fields(MYSQL *mysql, const char *table, + const char *wild); +MYSQL_RES * STDCALL mysql_list_processes(MYSQL *mysql); +MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql); +MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql); +int STDCALL mysql_options(MYSQL *mysql,enum mysql_option option, + const char *arg); +void STDCALL mysql_free_result(MYSQL_RES *result); +void STDCALL mysql_data_seek(MYSQL_RES *result, + my_ulonglong offset); +MYSQL_ROW_OFFSET STDCALL mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET); +MYSQL_FIELD_OFFSET STDCALL mysql_field_seek(MYSQL_RES *result, + MYSQL_FIELD_OFFSET offset); +MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result); +unsigned long * STDCALL mysql_fetch_lengths(MYSQL_RES *result); +MYSQL_FIELD * STDCALL mysql_fetch_field(MYSQL_RES *result); +unsigned long STDCALL mysql_escape_string(char *to,const char *from, + unsigned long from_length); +unsigned long STDCALL mysql_real_escape_string(MYSQL *mysql, + char *to,const char *from, + unsigned long length); +void STDCALL mysql_debug(const char *debug); +char * STDCALL mysql_odbc_escape_string(MYSQL *mysql, + char *to, + unsigned long to_length, + const char *from, + unsigned long from_length, + void *param, + char * + (*extend_buffer) + (void *, char *to, + unsigned long *length)); +void STDCALL myodbc_remove_escape(MYSQL *mysql,char *name); +unsigned int STDCALL mysql_thread_safe(void); + + +#define mysql_reload(mysql) mysql_refresh((mysql),REFRESH_GRANT) + +/* new api functions */ + +#define HAVE_MYSQL_REAL_CONNECT + +#ifndef MYSQL_SERVER +#ifdef __cplusplus +} +#endif +#endif + +#endif diff --git a/VC++Files/winmysqladmin/mysql_com.h b/VC++Files/winmysqladmin/mysql_com.h new file mode 100644 index 00000000000..2a1471f735d --- /dev/null +++ b/VC++Files/winmysqladmin/mysql_com.h @@ -0,0 +1,242 @@ +/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA */ + +/* +** Common definition between mysql server & client +*/ + +#ifndef _mysql_com_h +#define _mysql_com_h + + +#define NAME_LEN 64 /* Field/table name length */ +#define HOSTNAME_LENGTH 60 +#define USERNAME_LENGTH 16 + +#define LOCAL_HOST "localhost" +#define LOCAL_HOST_NAMEDPIPE "." + +#if defined(__EMX__) || defined(__OS2__) +#undef MYSQL_UNIX_ADDR +#define MYSQL_OS2_ADDR "\\socket\\MySQL" +#define MYSQL_UNIX_ADDR MYSQL_OS2_ADDR +#endif +#if defined(__WIN__) && !defined( _CUSTOMCONFIG_) +#define MYSQL_NAMEDPIPE "MySQL" +#define MYSQL_SERVICENAME "MySql" +#endif /* __WIN__ */ + +enum enum_server_command {COM_SLEEP,COM_QUIT,COM_INIT_DB,COM_QUERY, + COM_FIELD_LIST,COM_CREATE_DB,COM_DROP_DB,COM_REFRESH, + COM_SHUTDOWN,COM_STATISTICS, + COM_PROCESS_INFO,COM_CONNECT,COM_PROCESS_KILL, + COM_DEBUG,COM_PING,COM_TIME,COM_DELAYED_INSERT, + COM_CHANGE_USER, COM_BINLOG_DUMP, + COM_TABLE_DUMP}; + +#define NOT_NULL_FLAG 1 /* Field can't be NULL */ +#define PRI_KEY_FLAG 2 /* Field is part of a primary key */ +#define UNIQUE_KEY_FLAG 4 /* Field is part of a unique key */ +#define MULTIPLE_KEY_FLAG 8 /* Field is part of a key */ +#define BLOB_FLAG 16 /* Field is a blob */ +#define UNSIGNED_FLAG 32 /* Field is unsigned */ +#define ZEROFILL_FLAG 64 /* Field is zerofill */ +#define BINARY_FLAG 128 +/* The following are only sent to new clients */ +#define ENUM_FLAG 256 /* field is an enum */ +#define AUTO_INCREMENT_FLAG 512 /* field is a autoincrement field */ +#define TIMESTAMP_FLAG 1024 /* Field is a timestamp */ +#define SET_FLAG 2048 /* field is a set */ +#define PART_KEY_FLAG 16384 /* Intern; Part of some key */ +#define GROUP_FLAG 32768 /* Intern: Group field */ +#define UNIQUE_FLAG 65536 /* Intern: Used by sql_yacc */ + +#define REFRESH_GRANT 1 /* Refresh grant tables */ +#define REFRESH_LOG 2 /* Start on new log file */ +#define REFRESH_TABLES 4 /* close all tables */ +#define REFRESH_HOSTS 8 /* Flush host cache */ +#define REFRESH_STATUS 16 /* Flush status variables */ +#define REFRESH_THREADS 32 /* Flush status variables */ +#define REFRESH_SLAVE 64 /* Reset master info and restart slave + thread */ +#define REFRESH_MASTER 128 /* Remove all bin logs in the index + and truncate the index */ + +/* The following can't be set with mysql_refresh() */ +#define REFRESH_READ_LOCK 16384 /* Lock tables for read */ +#define REFRESH_FAST 32768 /* Intern flag */ + +#define CLIENT_LONG_PASSWORD 1 /* new more secure passwords */ +#define CLIENT_FOUND_ROWS 2 /* Found instead of affected rows */ +#define CLIENT_LONG_FLAG 4 /* Get all column flags */ +#define CLIENT_CONNECT_WITH_DB 8 /* One can specify db on connect */ +#define CLIENT_NO_SCHEMA 16 /* Don't allow database.table.column */ +#define CLIENT_COMPRESS 32 /* Can use compression protocol */ +#define CLIENT_ODBC 64 /* Odbc client */ +#define CLIENT_LOCAL_FILES 128 /* Can use LOAD DATA LOCAL */ +#define CLIENT_IGNORE_SPACE 256 /* Ignore spaces before '(' */ +#define CLIENT_CHANGE_USER 512 /* Support the mysql_change_user() */ +#define CLIENT_INTERACTIVE 1024 /* This is an interactive client */ +#define CLIENT_SSL 2048 /* Switch to SSL after handshake */ +#define CLIENT_IGNORE_SIGPIPE 4096 /* IGNORE sigpipes */ +#define CLIENT_TRANSACTIONS 8196 /* Client knows about transactions */ + +#define SERVER_STATUS_IN_TRANS 1 /* Transaction has started */ +#define SERVER_STATUS_AUTOCOMMIT 2 /* Server in auto_commit mode */ + +#define MYSQL_ERRMSG_SIZE 200 +#define NET_READ_TIMEOUT 30 /* Timeout on read */ +#define NET_WRITE_TIMEOUT 60 /* Timeout on write */ +#define NET_WAIT_TIMEOUT 8*60*60 /* Wait for new query */ + +#ifndef Vio_defined +#define Vio_defined +#ifdef HAVE_VIO +class Vio; /* Fill Vio class in C++ */ +#else +struct st_vio; /* Only C */ +typedef struct st_vio Vio; +#endif +#endif + +typedef struct st_net { + Vio* vio; + my_socket fd; /* For Perl DBI/dbd */ + int fcntl; + unsigned char *buff,*buff_end,*write_pos,*read_pos; + char last_error[MYSQL_ERRMSG_SIZE]; + unsigned int last_errno,max_packet,timeout,pkt_nr; + unsigned char error; + my_bool return_errno,compress; + my_bool no_send_ok; /* needed if we are doing several + queries in one command ( as in LOAD TABLE ... FROM MASTER ), + and do not want to confuse the client with OK at the wrong time + */ + unsigned long remain_in_buf,length, buf_length, where_b; + unsigned int *return_status; + unsigned char reading_or_writing; + char save_char; +} NET; + +#define packet_error ((unsigned int) -1) + +enum enum_field_types { FIELD_TYPE_DECIMAL, FIELD_TYPE_TINY, + FIELD_TYPE_SHORT, FIELD_TYPE_LONG, + FIELD_TYPE_FLOAT, FIELD_TYPE_DOUBLE, + FIELD_TYPE_NULL, FIELD_TYPE_TIMESTAMP, + FIELD_TYPE_LONGLONG,FIELD_TYPE_INT24, + FIELD_TYPE_DATE, FIELD_TYPE_TIME, + FIELD_TYPE_DATETIME, FIELD_TYPE_YEAR, + FIELD_TYPE_NEWDATE, + FIELD_TYPE_ENUM=247, + FIELD_TYPE_SET=248, + FIELD_TYPE_TINY_BLOB=249, + FIELD_TYPE_MEDIUM_BLOB=250, + FIELD_TYPE_LONG_BLOB=251, + FIELD_TYPE_BLOB=252, + FIELD_TYPE_VAR_STRING=253, + FIELD_TYPE_STRING=254 +}; + +#define FIELD_TYPE_CHAR FIELD_TYPE_TINY /* For compability */ +#define FIELD_TYPE_INTERVAL FIELD_TYPE_ENUM /* For compability */ + +extern unsigned long max_allowed_packet; +extern unsigned long net_buffer_length; + +#define net_new_transaction(net) ((net)->pkt_nr=0) + +int my_net_init(NET *net, Vio* vio); +void net_end(NET *net); +void net_clear(NET *net); +int net_flush(NET *net); +int my_net_write(NET *net,const char *packet,unsigned long len); +int net_write_command(NET *net,unsigned char command,const char *packet, + unsigned long len); +int net_real_write(NET *net,const char *packet,unsigned long len); +unsigned int my_net_read(NET *net); + +struct rand_struct { + unsigned long seed1,seed2,max_value; + double max_value_dbl; +}; + + /* The following is for user defined functions */ + +enum Item_result {STRING_RESULT,REAL_RESULT,INT_RESULT}; + +typedef struct st_udf_args +{ + unsigned int arg_count; /* Number of arguments */ + enum Item_result *arg_type; /* Pointer to item_results */ + char **args; /* Pointer to argument */ + unsigned long *lengths; /* Length of string arguments */ + char *maybe_null; /* Set to 1 for all maybe_null args */ +} UDF_ARGS; + + /* This holds information about the result */ + +typedef struct st_udf_init +{ + my_bool maybe_null; /* 1 if function can return NULL */ + unsigned int decimals; /* for real functions */ + unsigned int max_length; /* For string functions */ + char *ptr; /* free pointer for function data */ + my_bool const_item; /* 0 if result is independent of arguments */ +} UDF_INIT; + + /* Constants when using compression */ +#define NET_HEADER_SIZE 4 /* standard header size */ +#define COMP_HEADER_SIZE 3 /* compression header extra size */ + + /* Prototypes to password functions */ + +#ifdef __cplusplus +extern "C" { +#endif + +void randominit(struct rand_struct *,unsigned long seed1, + unsigned long seed2); +double rnd(struct rand_struct *); +void make_scrambled_password(char *to,const char *password); +void get_salt_from_password(unsigned long *res,const char *password); +void make_password_from_salt(char *to, unsigned long *hash_res); +char *scramble(char *to,const char *message,const char *password, + my_bool old_ver); +my_bool check_scramble(const char *, const char *message, + unsigned long *salt,my_bool old_ver); +char *get_tty_password(char *opt_message); +void hash_password(unsigned long *result, const char *password); +#ifdef __cplusplus +} +#endif + +/* Some other useful functions */ + +void my_init(void); +void load_defaults(const char *conf_file, const char **groups, + int *argc, char ***argv); + +#define NULL_LENGTH ((unsigned long) ~0) /* For net_store_length */ + +#ifdef __WIN__ +#define socket_errno WSAGetLastError() +#else +#define socket_errno errno +#endif + +#endif diff --git a/VC++Files/winmysqladmin/mysql_version.h b/VC++Files/winmysqladmin/mysql_version.h new file mode 100644 index 00000000000..1f868704fe8 --- /dev/null +++ b/VC++Files/winmysqladmin/mysql_version.h @@ -0,0 +1,20 @@ +/* Copyright Abandoned 1996,1999 TCX DataKonsult AB & Monty Program KB & Detron HB + This file is public domain and comes with NO WARRANTY of any kind */ + +/* Version numbers for protocol & mysqld */ + +#ifdef _CUSTOMCONFIG_ + #include <custom_conf.h> +#else +#define PROTOCOL_VERSION 10 +#define MYSQL_SERVER_VERSION "3.23.22-beta" +#define FRM_VER 6 +#define MYSQL_VERSION_ID 32322 +#define MYSQL_PORT 3306 +#define MYSQL_UNIX_ADDR "/tmp/mysql.sock" + +/* mysqld compile time options */ +#ifndef MYSQL_CHARSET +#define MYSQL_CHARSET "latin1" +#endif +#endif diff --git a/VC++Files/winmysqladmin/winmysqladmin.cpp b/VC++Files/winmysqladmin/winmysqladmin.cpp new file mode 100644 index 00000000000..591b7518fa3 --- /dev/null +++ b/VC++Files/winmysqladmin/winmysqladmin.cpp @@ -0,0 +1,38 @@ +//--------------------------------------------------------------------------- +#include <vcl.h> +#pragma hdrstop +HINSTANCE g_hinst; +USERES("winmysqladmin.res"); +USEFORM("main.cpp", Form1); +USEFORM("initsetup.cpp", Form2); +USEFORM("db.cpp", dbfrm); +USELIB("lib\mysqlclient.lib"); +USELIB("lib\myisammrg.lib"); +USELIB("lib\heap.lib"); +USELIB("lib\isam.lib"); +USELIB("lib\merge.lib"); +USELIB("lib\myisam.lib"); +USELIB("lib\mysys.lib"); +USELIB("lib\regex.lib"); +USELIB("lib\strings.lib"); +USELIB("lib\zlib.lib"); +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) +{ + try + { + Application->Initialize(); + Application->HelpFile = "C:\\mysql\\bin\\WINMYSQLADMIN.HLP"; + Application->Title = "WinMySQLadmin 1.0"; + Application->CreateForm(__classid(TForm1), &Form1); + Application->CreateForm(__classid(TForm2), &Form2); + Application->CreateForm(__classid(Tdbfrm), &dbfrm); + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + return 0; +} +//--------------------------------------------------------------------------- diff --git a/VC++Files/zlib/zlib.dsp b/VC++Files/zlib/zlib.dsp index 5a596b41f32..b46afad005c 100644 --- a/VC++Files/zlib/zlib.dsp +++ b/VC++Files/zlib/zlib.dsp @@ -65,8 +65,7 @@ LIB32=link.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 /D "_DEBUG" /D "__WIN32__" /D "_WINDOWS" /FD /c -# SUBTRACT CPP /YX +# ADD CPP /nologo /G6 /MTd /W3 /Zi /Od /D "_DEBUG" /D "__WIN32__" /D "_WINDOWS" /FD /c # ADD BASE RSC /l 0x409 # ADD RSC /l 0x409 BSC32=bscmake.exe diff --git a/include/config-win.h b/include/config-win.h index 12a89bec21b..c0d0dad894e 100644 --- a/include/config-win.h +++ b/include/config-win.h @@ -24,11 +24,11 @@ #include <malloc.h> #if defined(__NT__) -#define SYSTEM_TYPE "NT" +#define SYSTEM_TYPE "NT" #elif defined(__WIN2000__) -#define SYSTEM_TYPE "WIN2000" +#define SYSTEM_TYPE "WIN2000" #else -#define SYSTEM_TYPE "Win95/Win98" +#define SYSTEM_TYPE "Win95/Win98" #endif #if defined(_WIN64) || defined(WIN64) @@ -43,23 +43,23 @@ #endif #endif /* _WIN64 */ #ifndef __WIN__ -#define __WIN__ /* To make it easier in VC++ */ +#define __WIN__ /* To make it easier in VC++ */ #endif /* File and lock constants */ -#define O_SHARE 0x1000 /* Open file in sharing mode */ +#define O_SHARE 0x1000 /* Open file in sharing mode */ #ifdef __BORLANDC__ -#define F_RDLCK LK_NBLCK /* read lock */ -#define F_WRLCK LK_NBRLCK /* write lock */ -#define F_UNLCK LK_UNLCK /* remove lock(s) */ +#define F_RDLCK LK_NBLCK /* read lock */ +#define F_WRLCK LK_NBRLCK /* write lock */ +#define F_UNLCK LK_UNLCK /* remove lock(s) */ #else -#define F_RDLCK _LK_NBLCK /* read lock */ -#define F_WRLCK _LK_NBRLCK /* write lock */ -#define F_UNLCK _LK_UNLCK /* remove lock(s) */ +#define F_RDLCK _LK_NBLCK /* read lock */ +#define F_WRLCK _LK_NBRLCK /* write lock */ +#define F_UNLCK _LK_UNLCK /* remove lock(s) */ #endif -#define F_EXCLUSIVE 1 /* We have only exclusive locking */ -#define F_TO_EOF (INT_MAX32/2) /* size for lock of all file */ +#define F_EXCLUSIVE 1 /* We have only exclusive locking */ +#define F_TO_EOF (INT_MAX32/2) /* size for lock of all file */ #define F_OK 0 /* parameter to access() */ #define S_IROTH S_IREAD /* for my_lib */ @@ -70,15 +70,15 @@ #define O_SHORT_LIVED 0 #define SH_DENYNO _SH_DENYNO #else -#define O_BINARY _O_BINARY /* compability with MSDOS */ -#define FILE_BINARY _O_BINARY /* my_fopen in binary mode */ -#define O_TEMPORARY _O_TEMPORARY -#define O_SHORT_LIVED _O_SHORT_LIVED -#define SH_DENYNO _SH_DENYNO +#define O_BINARY _O_BINARY /* compability with MSDOS */ +#define FILE_BINARY _O_BINARY /* my_fopen in binary mode */ +#define O_TEMPORARY _O_TEMPORARY +#define O_SHORT_LIVED _O_SHORT_LIVED +#define SH_DENYNO _SH_DENYNO #endif #define NO_OPEN_3 /* For my_create() */ -#define SIGQUIT SIGTERM /* No SIGQUIT */ +#define SIGQUIT SIGTERM /* No SIGQUIT */ #undef _REENTRANT /* Crashes something for win32 */ #undef SAFE_MUTEX /* Can't be used on windows */ @@ -89,15 +89,15 @@ /* Type information */ -typedef unsigned short ushort; -typedef unsigned int uint; +typedef unsigned short ushort; +typedef unsigned int uint; typedef unsigned __int64 ulonglong; /* Microsofts 64 bit types */ -typedef __int64 longlong; +typedef __int64 longlong; typedef int sigset_t; #define longlong_defined /* off_t should not be __int64 because of conflicts in header files; Use my_off_t or os_off_t instead */ -typedef long off_t; +typedef long off_t; typedef __int64 os_off_t; #ifdef _WIN64 typedef UINT_PTR rf_SetTimer; @@ -109,7 +109,7 @@ typedef uint rf_SetTimer; #define Socket_defined #define my_socket SOCKET #define bool BOOL -#define SIGPIPE SIGINT +#define SIGPIPE SIGINT #define RETQSORTTYPE void #define QSORT_TYPE_IS_VOID #define RETSIGTYPE void @@ -118,7 +118,9 @@ typedef uint rf_SetTimer; #define bool_defined #define byte_defined #define HUGE_PTR -#define STDCALL __stdcall /* Used by libmysql.dll */ +#define STDCALL __stdcall /* Used by libmysql.dll */ +#define isnan(X) _isnan(X) +#define finite(X) _finite(X) #ifndef UNDEF_THREAD_HACK #define THREAD @@ -201,7 +203,7 @@ inline double ulonglong2double(ulonglong value) (((uint32) ((uchar) (A)[1])) << 8) +\ (((uint32) ((uchar) (A)[2])) << 16) +\ (((uint32) ((uchar) (A)[3])) << 24)) +\ - (((ulonglong) ((uchar) (A)[4])) << 32)) + (((ulonglong) ((uchar) (A)[4])) << 32)) #define uint8korr(A) (*((ulonglong *) (A))) #define sint8korr(A) (*((longlong *) (A))) #define int2store(T,A) *((uint16*) (T))= (uint16) (A) @@ -247,14 +249,15 @@ inline double ulonglong2double(ulonglong value) #define HAVE_FLOAT_H #define HAVE_LIMITS_H #define HAVE_STDDEF_H -#define HAVE_RINT /* defined in this file */ -#define NO_FCNTL_NONBLOCK /* No FCNTL */ +#define HAVE_RINT /* defined in this file */ +#define NO_FCNTL_NONBLOCK /* No FCNTL */ #define HAVE_ALLOCA #define HAVE_STRPBRK #define HAVE_STRSTR #define HAVE_COMPRESS #define HAVE_CREATESEMAPHORE - +#define HAVE_ISNAN +#define HAVE_FINITE #define HAVE_ISAM /* We want to have support for ISAM in 4.0 */ #ifdef NOT_USED @@ -276,8 +279,8 @@ inline double ulonglong2double(ulonglong value) #ifdef _CUSTOMCONFIG_ #include <custom_conf.h> #else -#define DEFAULT_MYSQL_HOME "c:\\mysql" -#define PACKAGE "mysql" +#define DEFAULT_MYSQL_HOME "c:\\mysql" +#define PACKAGE "mysql" #define DEFAULT_BASEDIR "C:\\" #define SHAREDIR "share" #define DEFAULT_CHARSET_HOME "C:/mysql/" @@ -303,6 +306,6 @@ inline double ulonglong2double(ulonglong value) pthread_mutex_lock((L)); (V)+=(C); pthread_mutex_unlock((L)); #define thread_safe_sub(V,C,L) \ pthread_mutex_lock((L)); (V)-=(C); pthread_mutex_unlock((L)); -#define statistic_add(V,C,L) (V)+=(C) +#define statistic_add(V,C,L) (V)+=(C) #endif #define statistic_increment(V,L) thread_safe_increment((V),(L)) diff --git a/include/myisam.h b/include/myisam.h index 32e9225efdf..9b5d21a1844 100644 --- a/include/myisam.h +++ b/include/myisam.h @@ -351,6 +351,7 @@ typedef struct st_mi_check_param char *op_name; } MI_CHECK; + typedef struct st_sort_info { MI_INFO *info; @@ -368,6 +369,7 @@ typedef struct st_sort_info pthread_cond_t cond; } SORT_INFO; + typedef struct st_mi_sort_param { pthread_t thr; @@ -391,6 +393,7 @@ typedef struct st_mi_sort_param void (*lock_in_memory)(MI_CHECK *); } MI_SORT_PARAM; + /* functions in mi_check */ void myisamchk_init(MI_CHECK *param); int chk_status(MI_CHECK *param, MI_INFO *info); @@ -422,8 +425,6 @@ int movepoint(MI_INFO *info,byte *record,my_off_t oldpos, int sort_write_record(MI_SORT_PARAM *sort_param); int write_data_suffix(SORT_INFO *sort_info, my_bool fix_datafile); int _create_index_by_sort(MI_SORT_PARAM *info,my_bool no_messages, ulong); -void *_thr_find_all_keys(MI_SORT_PARAM *info); -int _thr_write_keys(MI_SORT_PARAM *sort_param); int test_if_almost_full(MI_INFO *info); int recreate_table(MI_CHECK *param, MI_INFO **org_info, char *filename); void mi_disable_non_unique_index(MI_INFO *info, ha_rows rows); diff --git a/myisam/mi_check.c b/myisam/mi_check.c index 9426a55e4d2..3c1d090f53d 100644 --- a/myisam/mi_check.c +++ b/myisam/mi_check.c @@ -2130,6 +2130,7 @@ int mi_repair_by_sort_r(MI_CHECK *param, register MI_INFO *info, IO_CACHE_SHARE io_share; SORT_INFO sort_info; ulonglong key_map=share->state.key_map; + pthread_attr_t thr_attr; DBUG_ENTER("mi_repair_by_sort_r"); start_records=info->state->records; @@ -2307,6 +2308,9 @@ int mi_repair_by_sort_r(MI_CHECK *param, register MI_INFO *info, pthread_mutex_lock(&sort_info.mutex); init_io_cache_share(¶m->read_cache, &io_share, i); + (void) pthread_attr_init(&thr_attr); + (void) pthread_attr_setdetachstate(&thr_attr,PTHREAD_CREATE_DETACHED); + for (i=0 ; i < sort_info.total_keys ; i++) { sort_param[i].read_cache=param->read_cache; @@ -2322,8 +2326,9 @@ int mi_repair_by_sort_r(MI_CHECK *param, register MI_INFO *info, #else param->sort_buffer_length*sort_param[i].key_length/total_key_length; #endif - if (pthread_create(& sort_param[i].thr, 0, - (void *(*)(void*))_thr_find_all_keys, sort_param+i)) + if (pthread_create(&sort_param[i].thr, &thr_attr, + thr_find_all_keys, + (void *) (sort_param+i))) { mi_check_print_error(param,"Cannot start a repair thread"); remove_io_thread(¶m->read_cache); @@ -2332,13 +2337,14 @@ int mi_repair_by_sort_r(MI_CHECK *param, register MI_INFO *info, else sort_info.threads_running++; } + (void) pthread_attr_destroy(&thr_attr); /* waiting for all threads to finish */ while (sort_info.threads_running) pthread_cond_wait(&sort_info.cond, &sort_info.mutex); pthread_mutex_unlock(&sort_info.mutex); - if ((got_error= _thr_write_keys(sort_param))) + if ((got_error= thr_write_keys(sort_param))) { param->retry_repair=1; goto err; diff --git a/myisam/mi_locking.c b/myisam/mi_locking.c index ea4966b05c5..cbde05d31f5 100644 --- a/myisam/mi_locking.c +++ b/myisam/mi_locking.c @@ -219,7 +219,7 @@ int mi_lock_database(MI_INFO *info, int lock_type) /**************************************************************************** -** The following functions are called by thr_lock() in threaded applications + The following functions are called by thr_lock() in threaded applications ****************************************************************************/ void mi_get_status(void* param) diff --git a/myisam/myisamchk.c b/myisam/myisamchk.c index 6f12ce1536b..3432bdafd0e 100644 --- a/myisam/myisamchk.c +++ b/myisam/myisamchk.c @@ -99,7 +99,7 @@ int main(int argc, char **argv) while (--argc >= 0) { int new_error=myisamchk(&check_param, *(argv++)); - if (check_param.testflag & T_REP_ANY != T_REP) + if ((check_param.testflag & T_REP_ANY) != T_REP) check_param.testflag&= ~T_REP; VOID(fflush(stdout)); VOID(fflush(stderr)); diff --git a/myisam/myisamdef.h b/myisam/myisamdef.h index b5da3d4b4c3..cef864e6efb 100644 --- a/myisam/myisamdef.h +++ b/myisam/myisamdef.h @@ -659,6 +659,10 @@ void mi_check_print_error _VARARGS((MI_CHECK *param, const char *fmt,...)); void mi_check_print_warning _VARARGS((MI_CHECK *param, const char *fmt,...)); void mi_check_print_info _VARARGS((MI_CHECK *param, const char *fmt,...)); int flush_pending_blocks(MI_SORT_PARAM *param); +int thr_write_keys(MI_SORT_PARAM *sort_param); +#ifdef THREAD +pthread_handler_decl(thr_find_all_keys,arg); +#endif #ifdef __cplusplus } diff --git a/myisam/sort.c b/myisam/sort.c index 65b606f7a68..e0851b062e1 100644 --- a/myisam/sort.c +++ b/myisam/sort.c @@ -277,8 +277,9 @@ static ha_rows NEAR_F find_all_keys(MI_SORT_PARAM *info, uint keys, /* Search after all keys and place them in a temp. file */ -void *_thr_find_all_keys(MI_SORT_PARAM *info) +pthread_handler_decl(thr_find_all_keys,arg) { + MI_SORT_PARAM *info= (MI_SORT_PARAM*) arg; int error; uint memavl,old_memavl,keys,sort_length; uint idx, maxbuffer; @@ -401,10 +402,10 @@ void *_thr_find_all_keys(MI_SORT_PARAM *info) pthread_cond_signal(&info->sort_info->cond); pthread_mutex_unlock(&info->sort_info->mutex); return NULL; -} /* _thr_find_all_keys */ +} -int _thr_write_keys(MI_SORT_PARAM *sort_param) +int thr_write_keys(MI_SORT_PARAM *sort_param) { SORT_INFO *sort_info=sort_param->sort_info; MI_CHECK *param=sort_info->param; diff --git a/sql/field.cc b/sql/field.cc index a23f41e1fa0..88f4098ca0a 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -699,11 +699,13 @@ void Field_decimal::store(double nr) return; } - if (isinf(nr)) // Handle infinity as special case +#ifdef HAVE_FINITE + if (!finite(nr)) // Handle infinity as special case { overflow(nr < 0.0); return; } +#endif reg4 uint i,length; char fyllchar,*to; diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index f5b69f1aff9..a3c6da5e50d 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -263,7 +263,9 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, List<Item> &fields, end_delayed_insert(thd); } if (info.copied || info.deleted) + { query_cache_invalidate3(thd, table_list, 1); + } } else { -- 2.30.9