frmBackup::frmBackup(frmMain *form, pgObject *obj) : ExternProcessDialog(form) { object = obj; SetFont(settings->GetSystemFont()); LoadResource(form, wxT("frmBackup")); RestorePosition(); SetTitle(object->GetTranslatedMessage(BACKUPTITLE)); if (object->GetConnection()->EdbMinimumVersion(8, 0)) backupExecutable = edbBackupExecutable; else if (object->GetConnection()->GetIsGreenplum()) backupExecutable = gpBackupExecutable; else backupExecutable = pgBackupExecutable; canBlob = (obj->GetMetaType() == PGM_DATABASE); chkBlobs->SetValue(canBlob); chkDisableDollar->Enable(obj->GetConnection()->BackendMinimumVersion(7, 5)); wxString val; settings->Read(wxT("frmBackup/LastFile"), &val, wxEmptyString); txtFilename->SetValue(val); pgServer *server = object->GetServer(); if (!server->GetPasswordIsStored()) environment.Add(wxT("PGPASSWORD="******"PGSSLMODE=") + server->GetConnection()->GetSslModeName()); if (server->GetSSLRootCert() != wxEmptyString) environment.Add(wxT("PGSSLROOTCERT=") + server->GetSSLRootCert()); if (server->GetSSLCert() != wxEmptyString) environment.Add(wxT("PGSSLCERT=") + server->GetSSLCert()); if (server->GetSSLKey() != wxEmptyString) environment.Add(wxT("PGSSLKEY=") + server->GetSSLKey()); if (server->GetSSLCrl() != wxEmptyString) environment.Add(wxT("PGSSLCRL=") + server->GetSSLCrl()); // Icon SetIcon(*backup_png_ico); // fix translation problem wxString dollarLabel = wxGetTranslation(_("$$ quoting")); dollarLabel.Replace(wxT("$$"), wxT("$")); chkDisableDollar->SetLabel(dollarLabel); chkDisableDollar->SetSize(chkDisableDollar->GetBestSize()); txtMessages = CTRL_TEXT("txtMessages"); // Note that under GTK+, SetMaxLength() function may only be used with single line text controls. // (see http://docs.wxwidgets.org/2.8/wx_wxtextctrl.html#wxtextctrlsetmaxlength) #ifndef __WXGTK__ txtMessages->SetMaxLength(0L); #endif btnOK->Disable(); long encNo = 0; wxString encStr; cbEncoding->Append(wxT("")); do { encStr = object->GetConnection()->ExecuteScalar( wxT("SELECT pg_encoding_to_char(") + NumToStr(encNo) + wxT(")")); if (pgConn::IsValidServerEncoding(encNo) && !encStr.IsEmpty()) cbEncoding->Append(encStr); encNo++; } while (!encStr.IsEmpty()); cbEncoding->SetSelection(0); wxString i18ndb = _("Database"); wxTreeItemId db = ctvObjects->AddRoot(i18ndb + wxT(" ") + object->GetDatabase()->GetName(), 1); bool checked; wxString query = wxT("SELECT nspname, relname ") wxT("FROM pg_namespace n ") wxT("LEFT JOIN pg_class c ON n.oid=c.relnamespace AND relkind='r' ") wxT("WHERE nspname NOT LIKE E'pg\\\\_%' AND nspname <> 'information_schema' "); if (!object->GetDatabase()->GetSchemaRestriction().IsEmpty()) query += wxT("AND nspname IN (") + object->GetDatabase()->GetSchemaRestriction() + wxT(")"); query += wxT("ORDER BY nspname, relname"); pgSet *objects = object->GetDatabase()->ExecuteSet(query); if (objects) { wxString currentSchema = wxT(""); wxTreeItemId currentSchemaNode; while (!objects->Eof()) { if (currentSchema != objects->GetVal(wxT("nspname"))) { currentSchema = objects->GetVal(wxT("nspname")); if (object->GetMetaType() == PGM_SCHEMA) { checked = ((pgSchema *)object)->GetIdentifier() == currentSchema; } else { if (object->GetMetaType() == PGM_TABLE || object->GetMetaType() == GP_PARTITION) { checked = ((pgTable *)object)->GetSchema()->GetIdentifier() == currentSchema || (object->GetMetaType() != PGM_TABLE && object->GetMetaType() != GP_PARTITION); } else { checked = object->GetMetaType() != PGM_TABLE && object->GetMetaType() != GP_PARTITION; } } currentSchemaNode = ctvObjects->AppendItem(db, currentSchema, checked ? 1 : 0); } if (!objects->GetVal(wxT("relname")).IsNull()) { if (object->GetMetaType() == PGM_TABLE || object->GetMetaType() == GP_PARTITION) { checked = ((pgTable *)object)->GetSchema()->GetIdentifier() == currentSchema && ((pgTable *)object)->GetIdentifier() == objects->GetVal(wxT("relname")); } else { if (object->GetMetaType() == PGM_SCHEMA) { checked = ((pgSchema *)object)->GetIdentifier() == currentSchema; } else { if (object->GetMetaType() == PGM_TABLE || object->GetMetaType() == GP_PARTITION) { checked = ((pgTable *)object)->GetSchema()->GetIdentifier() == currentSchema || (object->GetMetaType() != PGM_TABLE && object->GetMetaType() != GP_PARTITION); } else { checked = object->GetMetaType() != PGM_TABLE && object->GetMetaType() != GP_PARTITION; } } } ctvObjects->AppendItem(currentSchemaNode, objects->GetVal(wxT("relname")), checked ? 1 : 0); } objects->MoveNext(); } ctvObjects->ExpandAll(); delete objects; } if (!pgAppMinimumVersion(backupExecutable, 9, 3)) { txtNumberOfJobs->Disable(); } if (!pgAppMinimumVersion(backupExecutable, 9, 2)) { chkSectionPreData->Disable(); chkSectionData->Disable(); chkSectionPostData->Disable(); } if (!pgAppMinimumVersion(backupExecutable, 9, 1)) { chkForceQuoteForIdent->Disable(); chkNoUnloggedTableData->Disable(); } if (!pgAppMinimumVersion(backupExecutable, 8, 4)) { chkNoTablespaces->Disable(); cbRolename->Disable(); } else { // Available rolenames if (object->GetServer()->GetConnection()->BackendMinimumVersion(8, 1)) { pgSetIterator set(object->GetServer()->GetConnection(), wxT("SELECT DISTINCT rolname\n") wxT("FROM pg_roles db\n") wxT("ORDER BY rolname")); cbRolename->Append(wxEmptyString); while(set.RowsLeft()) cbRolename->Append(set.GetVal(wxT("rolname"))); cbRolename->SetValue(object->GetServer()->GetRolename()); cbRolename->Enable(true); } else cbRolename->Disable(); } if (!pgAppMinimumVersion(backupExecutable, 8, 1)) { cbEncoding->Disable(); } cbFormat->Append(_("Custom")); cbFormat->Append(_("Tar")); cbFormat->Append(_("Plain")); cbFormat->SetSelection(0); if (pgAppMinimumVersion(backupExecutable, 9, 1)) cbFormat->Append(_("Directory")); wxCommandEvent ev; OnChangePlain(ev); }
frmBackup::frmBackup(frmMain *form, pgObject *obj) : ExternProcessDialog(form) { object=obj; wxWindowBase::SetFont(settings->GetSystemFont()); LoadResource(form, wxT("frmBackup")); RestorePosition(); SetTitle(wxString::Format(_("Backup %s %s"), object->GetTranslatedTypeName().c_str(), object->GetFullIdentifier().c_str())); if (object->GetConnection()->EdbMinimumVersion(8,0)) backupExecutable=edbBackupExecutable; else if (object->GetConnection()->GetIsGreenplum()) backupExecutable=gpBackupExecutable; else backupExecutable=pgBackupExecutable; canBlob = (obj->GetMetaType() == PGM_DATABASE); chkBlobs->SetValue(canBlob); chkDisableDollar->Enable(obj->GetConnection()->BackendMinimumVersion(7, 5)); wxString val; settings->Read(wxT("frmBackup/LastFile"), &val, wxEmptyString); txtFilename->SetValue(val); if (!object->GetDatabase()->GetServer()->GetPasswordIsStored()) environment.Add(wxT("PGPASSWORD="******"PGSSLMODE=") + object->GetServer()->GetConnection()->GetSslModeName()); // Icon SetIcon(wxIcon(backup_xpm)); // fix translation problem wxString dollarLabel=wxGetTranslation(_("$$ quoting")); dollarLabel.Replace(wxT("$$"), wxT("$")); chkDisableDollar->SetLabel(dollarLabel); chkDisableDollar->SetSize(chkDisableDollar->GetBestSize()); txtMessages = CTRL_TEXT("txtMessages"); txtMessages->SetMaxLength(0L); btnOK->Disable(); long encNo=0; wxString encStr; cbEncoding->Append(wxT("")); do { encStr=object->GetConnection()->ExecuteScalar( wxT("SELECT pg_encoding_to_char(") + NumToStr(encNo) + wxT(")")); if (pgConn::IsValidServerEncoding(encNo) && !encStr.IsEmpty()) cbEncoding->Append(encStr); encNo++; } while (!encStr.IsEmpty()); cbEncoding->SetSelection(0); wxString i18ndb = _("Database"); wxTreeItemId db = ctvObjects->AddRoot(i18ndb + wxT(" ") + object->GetDatabase()->GetName(), 1); bool checked; wxString query = wxT("SELECT nspname, relname ") wxT("FROM pg_namespace n ") wxT("LEFT JOIN pg_class c ON n.oid=c.relnamespace AND relkind='r' ") wxT("WHERE nspname NOT LIKE 'pg_%' AND nspname <> 'information_schema' "); if (!object->GetDatabase()->GetSchemaRestriction().IsEmpty()) query += wxT("AND nspname IN (") + object->GetDatabase()->GetSchemaRestriction() + wxT(")"); query += wxT("ORDER BY nspname, relname"); pgSet *objects = object->GetDatabase()->ExecuteSet(query); if (objects) { wxString currentSchema = wxT(""); wxTreeItemId currentSchemaNode; while (!objects->Eof()) { if (currentSchema != objects->GetVal(wxT("nspname"))) { currentSchema = objects->GetVal(wxT("nspname")); if (object->GetMetaType() == PGM_SCHEMA) { checked = ((pgSchema*)object)->GetIdentifier() == currentSchema; } else { checked = true; } currentSchemaNode = ctvObjects->AppendItem(db, currentSchema, checked? 1:0); } if (!objects->GetVal(wxT("relname")).IsNull()) { if (object->GetMetaType() == PGM_TABLE || object->GetMetaType() == GP_PARTITION) { checked = ((pgTable*)object)->GetSchema()->GetIdentifier() == currentSchema && ((pgTable*)object)->GetIdentifier() == objects->GetVal(wxT("relname")); } else { if (object->GetMetaType() == PGM_SCHEMA) { checked = ((pgSchema*)object)->GetIdentifier() == currentSchema; } else { checked = true; } } ctvObjects->AppendItem(currentSchemaNode, objects->GetVal(wxT("relname")), checked? 1:0); } objects->MoveNext(); } ctvObjects->ExpandAll(); delete objects; } if (!pgAppMinimumVersion(backupExecutable, 8, 4)) { chkNoTablespaces->Disable(); } if (!pgAppMinimumVersion(backupExecutable, 8, 1)) { cbEncoding->Disable(); } wxCommandEvent ev; OnChangePlain(ev); }