wyBool ConnectionCommunity::OnNewSameConnection(HWND hwndactive, MDIWindow *pcquerywnd, ConnectionInfo &conninfo) { MYSQL *mysqlnew, *mysqlold, *mysqltemp; Tunnel *oldtunnel, *newtunnel; wyString msg; if(hwndactive) { oldtunnel = pcquerywnd->m_tunnel; newtunnel = CreateTunnel(wyFalse); mysqlnew = newtunnel->mysql_init((MYSQL*)0); mysqlold = pcquerywnd->m_mysql; if(!mysqlnew) { yog_message(pGlobals->m_pcmainwin->m_hwndmain, _(L"Could not initialize a new window."), pGlobals->m_appname.GetAsWideChar(), MB_ICONERROR | MB_OK | MB_HELP); delete newtunnel; return wyFalse; } SetCursor(LoadCursor(NULL, IDC_WAIT )); ShowCursor(1); InitConInfo(pcquerywnd->m_conninfo, conninfo); //Get SQL_MODE info //following function remarked for issue #1654 //GetAdvancedTabDetailsFromFile(&conninfo, (wyChar *)pcquerywnd->m_currentconn.GetString(), NULL); //post 8.01 /*InvalidateRect(pcquerywnd->GetActiveTabEditor()->m_peditorbase->m_hwnd, NULL, FALSE); UpdateWindow(pcquerywnd->GetActiveTabEditor()->m_peditorbase->m_hwnd);*/ if(conninfo.m_initcommand.GetLength()) ExecuteInitCommands(mysqlnew, newtunnel, conninfo.m_initcommand); SetMySQLOptions(&pcquerywnd->m_conninfo, newtunnel, &mysqlnew); mysqltemp = newtunnel->mysql_real_connect(mysqlnew, mysqlold->host, mysqlold->user, mysqlold->passwd, NULL, mysqlold->port, NULL, mysqlold->client_flag | CLIENT_MULTI_RESULTS, NULL); if(!mysqltemp) { ShowMySQLError(pGlobals->m_pcmainwin->m_hwndmain, oldtunnel, &mysqlnew, NULL, wyTrue); newtunnel->mysql_close(mysqlnew); delete newtunnel; return wyFalse; } /* change the conninfo things */ conninfo.m_tunnel = newtunnel; conninfo.m_mysql = mysqlnew; conninfo.m_hprocess = INVALID_HANDLE_VALUE; } return wyTrue; }
/*Importing process Also if select a db in OB and use 'Restore from SQL dump' warning pops up */ void ImportBatch::ImportDump() { MDIWindow *wnd; HTREEITEM hitem = NULL; wyString msg, dbname; wyInt32 ret = 0; if((SendMessage(m_hwndedit, WM_GETTEXTLENGTH, 0, 0)) > 0) { VERIFY(wnd = GetActiveWin()); //Check whether 'Restore from SQL dump' used after selecting a db in OB if(m_importing == wyFalse && wnd && wnd->m_pcqueryobject && wnd->m_pcqueryobject->GetSelectionImage() == NDATABASE) { hitem = wnd->m_pcqueryobject->GetDatabaseNode(); wnd->m_pcqueryobject->GetDatabaseName(hitem); dbname.SetAs(wnd->m_pcqueryobject->m_seldatabase); //warning shows when restore from sql dump does database(to avoid confusion of USE db in dump) if(dbname.GetLength()) { msg.Sprintf(_("The current database context is `%s`. SQL statements in the file will be executed here, unless one or more USE statement(s) specifying another database context is in the file. Do you want to continue?"), dbname.GetString()); ret = MessageBox(wnd->m_hwnd, msg.GetAsWideChar(),pGlobals->m_appname.GetAsWideChar(), MB_ICONQUESTION | MB_YESNO); if(ret != IDYES) return; } } if(m_importing) { /* behave as if the stop has been pushed */ // DEBUG_LOG("stopping query"); m_stopimport = wyTrue; } else { // DEBUG_LOG("executing import"); VERIFY(wyFalse == m_importing); SetCursor(LoadCursor(NULL, IDC_WAIT)); ExecuteBatch(); SetCursor(LoadCursor(NULL, IDC_ARROW)); } } else yog_message(m_hwnd, _(L"Please enter a filename"), pGlobals->m_appname.GetAsWideChar(), MB_OK | MB_ICONINFORMATION); return; }
wyBool BlobMgmt::SaveToFile() { OPENFILENAME open; wyWChar filename[MAX_PATH + 1] = {0}; HANDLE hfile = NULL; DWORD dwbytesread; if(!m_piub->m_data) { yog_message(m_hwnddlg, _(L"Cannot write NULL value!"), pGlobals->m_appname.GetAsWideChar(), MB_OK | MB_ICONINFORMATION); return wyFalse; } memset(&open, 0, sizeof(open)); open.lStructSize = OPENFILENAME_SIZE_VERSION_400; open.hwndOwner = m_hwnddlg; open.hInstance = pGlobals->m_pcmainwin->GetHinstance(); open.lpstrFilter = L"All Files(*.*)\0*.*\0"; open.lpstrCustomFilter =(LPWSTR)NULL; open.nFilterIndex = 1L; open.lpstrFile = filename; open.nMaxFile = MAX_PATH; open.lpstrTitle = L"Save As"; open.Flags = OFN_OVERWRITEPROMPT; if(! GetSaveFileName(&open)) return wyFalse; // else successfull. hfile = CreateFile((LPCWSTR)filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(hfile == INVALID_HANDLE_VALUE) { DisplayErrorText(GetLastError(), _("Could not create file !")); return wyFalse; } VERIFY(WriteFile(hfile, m_piub->m_data, m_piub->m_datasize, &dwbytesread, NULL)); CloseHandle(hfile); return wyTrue; }
// Function to Create Favorites folder // wyBool CFavoriteMenu::CreateFavoriteFolder() { wyWChar path[MAX_PATH + 1] = {0}; wyString fullpath; // get application data path // if(pGlobals->m_configdirpath.GetLength() || SUCCEEDED(SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, path))) { if(pGlobals->m_configdirpath.GetLength()) fullpath.SetAs(pGlobals->m_configdirpath); else { fullpath.SetAs(path); fullpath.Add("\\SQLyog"); } // Create SQLyog folder if( ::CreateDirectory(fullpath.GetAsWideChar(), NULL) == 0) { if(GetLastError() != ERROR_ALREADY_EXISTS) return OnError(_("Error while creating favorites folder")); } fullpath.Add("\\Favorites"); // Create Favorites folder if( ::CreateDirectory(fullpath.GetAsWideChar(), NULL) == 0) { if(GetLastError() != ERROR_ALREADY_EXISTS) return OnError(_("Error while creating favorites folder")); } return wyTrue; } else { yog_message(NULL, _(L"Error while creating favorites folder"), pGlobals->m_appname.GetAsWideChar(), MB_OK); return wyFalse; } }
/* Function just tests the connection and checks whether it is correct or not */ wyBool ConnectionCommunity::TestConnection(HWND hwnd, wyBool showmsg /*=wyTrue*/) { ConnectionInfo dbname; MYSQL *mysql; Tunnel *tunnel; wyString query("select version()"), version; wyInt32 ret; MYSQL_RES *res; MYSQL_ROW row; wyString myrowstr; InitConnectionDetails(&dbname); tunnel = CreateTunnel(wyFalse); dbname.m_tunnel = tunnel; // Call ConnectToMySQL function to initialize a new mySQL structure and connect to // mySQL server with the connection details. The function will return a valid mysql // pointer if connection successful and if not then it will return NULL. // If null then show the standard mySQL errors given by the mySQL API. //if database name is not correct, then throw error mysql = pGlobals->m_pcmainwin->m_connection->ConnectToMySQL(hwnd, &dbname); if(mysql == NULL) { if(tunnel) delete tunnel; return wyFalse; } else if((dbname.m_db.GetLength() != 0) && (IsDatabaseValid(dbname.m_db, mysql, tunnel) == wyFalse)) { query.Clear(); goto cleanup; } /* now we send a test query "select version()", if everything is ok then we show a message with the version number */ ret = HandleMySQLRealQuery(tunnel, mysql, query.GetString(), query.GetLength(), false); if(ret) goto cleanup; res = tunnel->mysql_store_result(mysql); if(!res && mysql->affected_rows == -1) goto cleanup; row = tunnel->mysql_fetch_row(res); myrowstr.SetAs(row[0], IsMySQL41(dbname.m_tunnel, &mysql)); version.Sprintf(_("Connection successful!\nMySQL version: %s"), myrowstr.GetString()); if(showmsg) yog_message(hwnd, version.GetAsWideChar(), _(L"Connection Info"), MB_OK | MB_ICONINFORMATION); tunnel->mysql_free_result(res); tunnel->mysql_close(mysql); delete tunnel; return wyTrue; cleanup: if(query.GetLength()) ShowMySQLError(hwnd, tunnel, &mysql, query.GetString()); else ShowMySQLError(hwnd, tunnel, &mysql, NULL, wyTrue); delete tunnel; return wyFalse; }
// Function deletes the conn detail section from the ini file. // Basically it sets the name to zero. wyInt32 ConnectionCommunity::DeleteConnDetail(HWND hdlg) { wyInt32 count, cursel, totcount, confirm; HWND hwndcombo; wyWChar directory[MAX_PATH + 1]={0}, *lpfileport = 0, connname[SIZE_512] = {0}; wyString conn, autodirectory, dirstr; wyUInt32 ret; confirm = yog_message(hdlg, _(L"Do you really want to delete the connection detail?"), pGlobals->m_appname.GetAsWideChar(), MB_YESNO | MB_HELP | MB_ICONQUESTION | MB_DEFBUTTON2); if(confirm != IDYES) return FALSE; // Get the complete path. ret = SearchFilePath(L"sqlyog", L".ini", MAX_PATH, directory, &lpfileport); if(ret == 0) return 0; VERIFY(hwndcombo = GetDlgItem(hdlg, IDC_DESC)); totcount = SendMessage(hwndcombo, CB_GETCOUNT, 0, 0); if(totcount == 0) return 0; VERIFY ((cursel = SendMessage(hwndcombo, CB_GETCURSEL, 0, 0))!= CB_ERR); count = SendMessage(hwndcombo, CB_GETITEMDATA, cursel, 0); conn.Sprintf("Connection %u", count); dirstr.SetAs(directory); //ret = WritePrivateProfileStringA(conn.GetString(), NULL, NULL, dirstr.GetString()); ret = wyIni::IniDeleteSection(conn.GetString(), dirstr.GetString()); SendMessage(hwndcombo, WM_GETTEXT, SIZE_512 - 1,(LPARAM)connname); SendMessage(hwndcombo, CB_DELETESTRING, cursel, 0); if(totcount == 1) { EnableWindow(GetDlgItem(hdlg, IDC_SAVE), FALSE); ChangeConnStates(hdlg, wyFalse); TabCtrl_SetCurSel(GetDlgItem(hdlg, IDC_CONNTAB), 0); OnConnDialogTabSelChange(hdlg, GetDlgItem(hdlg, IDC_CONNTAB)); m_conndetaildirty = wyFalse; SetFocus(hdlg); return 1; } else if(cursel ==(totcount - 1)) SendMessage(hwndcombo, CB_SETCURSEL, cursel-1, 0); else if(cursel == 0) SendMessage(hwndcombo, CB_SETCURSEL, 0, 0); else SendMessage(hwndcombo, CB_SETCURSEL, cursel-1, 0); GetInitialDetails(hdlg); //populate color array for connection combo PopulateColorArray(hwndcombo, &dirstr); TabCtrl_SetCurSel(GetDlgItem(hdlg, IDC_CONNTAB), 0); m_conndetaildirty = wyFalse; //for showing the server tab and hiding all other tabs ShowServerOptions(hdlg); return 1; }
//this function is called whenever the table link is clicked from the DB level void HandleClickTableURL(const wchar_t *url) { MDIWindow *wnd = NULL; HTREEITEM hitem = NULL; wyWChar buff[MAX_PATH] = {0}; TVITEM tvitem; wnd = GetActiveWin(); if(!wnd || !wnd->m_pcqueryobject) { return; } //switch the current selection image switch(wnd->m_pcqueryobject->GetSelectionImage()) { case NDATABASE: //get the selection hitem = TreeView_GetSelection(wnd->m_pcqueryobject->m_hwnd); if(hitem) { //expand and get the first child TreeView_Expand(wnd->m_pcqueryobject->m_hwnd, hitem, TVE_EXPAND); hitem = TreeView_GetChild(wnd->m_pcqueryobject->m_hwnd, hitem); } break; case NTABLES: //get the selection hitem = TreeView_GetSelection(wnd->m_pcqueryobject->m_hwnd); } if(!hitem) { return; } //expand the Tables folder TreeView_Expand(wnd->m_pcqueryobject->m_hwnd, hitem, TVE_EXPAND); //traverse through the tables for(hitem = TreeView_GetChild(wnd->m_pcqueryobject->m_hwnd, hitem); hitem; hitem = TreeView_GetNextSibling(wnd->m_pcqueryobject->m_hwnd, hitem)) { //get the item tvitem.hItem = hitem; tvitem.mask = TVIF_TEXT; buff[0] = 0; tvitem.pszText = buff; tvitem.cchTextMax = MAX_PATH - 1; TreeView_GetItem(wnd->m_pcqueryobject->m_hwnd, &tvitem); //compare the item with the url if(!wcscmp(url, tvitem.pszText)) { //set the selection; this will generate TVN_SELCHANGING and TVN_SELCHANGED messages TreeView_SelectItem(wnd->m_pcqueryobject->m_hwnd, hitem); break; } } if(!hitem) { MDIWindow *wnd = GetActiveWin(); yog_message(wnd->m_hwnd, PROMPT_MESSAGE, pGlobals->m_appname.GetAsWideChar(), MB_OK | MB_ICONINFORMATION); } return; }