////////////////////////////////////////////////////////////////////////// // // pgAdmin III - PostgreSQL Tools // RCS-ID: $Id: $ // Copyright (C) 2002 - 2009, The pgAdmin Development Team // This software is released under the Artistic Licence // // dlgExtTable.cpp - Greenplum Externtal Table Property // ////////////////////////////////////////////////////////////////////////// // wxWindows headers #include // App headers #include "pgAdmin3.h" #include "utils/misc.h" #include "utils/pgDefs.h" #include "ctl/ctlSQLBox.h" #include "dlg/dlgExtTable.h" #include "schema/pgExtTable.h" #include "schema/pgSchema.h" // pointer to controls #define pnlDefinition CTRL_PANEL("pnlDefinition") #define txtSqlBox CTRL_SQLBOX("txtSqlBox") BEGIN_EVENT_TABLE(dlgExtTable, dlgSecurityProperty) EVT_STC_MODIFIED(XRCID("txtSqlBox"), dlgProperty::OnChangeStc) END_EVENT_TABLE(); dlgProperty *pgExtTableFactory::CreateDialog(frmMain *frame, pgObject *node, pgObject *parent) { return new dlgExtTable(this, frame, (pgExtTable*)node, (pgSchema*)parent); } dlgExtTable::dlgExtTable(pgaFactory *f, frmMain *frame, pgExtTable *node, pgSchema *sch) : dlgSecurityProperty(f, frame, node, wxT("dlgExtTable"), wxT("SELECT"), "r") { schema=sch; extTable=node; } pgObject *dlgExtTable::GetObject() { return extTable; } int dlgExtTable::Go(bool modal) { int returncode; AddGroups(); AddUsers(cbOwner); if (extTable) { // edit mode //oldDefinition=extTable->GetFormattedDefinition(); txtSqlBox->SetText(wxT("")); /* wxCookieType cookie; pgObject *data=0; wxTreeItemId item=mainForm->GetBrowser()->GetFirstChild(table->GetId(), cookie); while (item) { data=mainForm->GetBrowser()->GetObject(item); pgaFactory *factory=data->GetFactory(); if (factory == columnFactory.GetCollectionFactory()) columnsItem = item; else if (factory == checkFactory.GetCollectionFactory()) constraintsItem = item; if (data->GetMetaType() == PGM_COLUMN && data->IsCollection()) columnsItem = item; else if (data->GetMetaType() == PGM_CONSTRAINT) constraintsItem = item; if (columnsItem && constraintsItem) break; item=mainForm->GetBrowser()->GetNextChild(table->GetId(), cookie); } if (columnsItem) { pgCollection *coll=(pgCollection*)data; // make sure all columns are appended coll->ShowTreeDetail(mainForm->GetBrowser()); // this is the columns collection item=mainForm->GetBrowser()->GetFirstChild(columnsItem, cookie); // add columns while (item) { data=mainForm->GetBrowser()->GetObject(item); if (data->IsCreatedBy(columnFactory)) { pgColumn *column=(pgColumn*)data; // make sure column details are read column->ShowTreeDetail(mainForm->GetBrowser()); if (column->GetColNumber() > 0) { bool inherited = (column->GetInheritedCount() != 0); int pos=lstColumns->AppendItem((inherited ? tableFactory.GetIconId() : column->GetIconId()), column->GetName(), column->GetDefinition()); previousColumns.Add(column->GetQuotedIdentifier() + wxT(" ") + column->GetDefinition()); lstColumns->SetItem(pos, 6, NumToStr((long)column)); if (inherited) lstColumns->SetItem(pos, 2, column->GetInheritedTableName()); } } item=mainForm->GetBrowser()->GetNextChild(columnsItem, cookie); } } */ } else { // create mode } returncode = dlgSecurityProperty::Go(modal); // This fixes a UI glitch on MacOS X and Windows // Because of the new layout code, the Privileges pane don't size itself properly SetSize(GetSize().GetWidth()+1, GetSize().GetHeight()); SetSize(GetSize().GetWidth()-1, GetSize().GetHeight()); return returncode; } pgObject *dlgExtTable::CreateObject(pgCollection *collection) { pgObject *obj=extTableFactory.CreateObjects(collection, 0, wxT("\n AND c.relname=") + qtDbString(txtName->GetValue()) + wxT("\n AND c.relnamespace=") + schema->GetOidStr()); return obj; } void dlgExtTable::CheckChange() { wxString name=GetName(); if (name) { if (extTable) EnableOK(txtComment->GetValue() != extTable->GetComment() || txtSqlBox->GetText() != oldDefinition || cbOwner->GetValue() != extTable->GetOwner() || name != extTable->GetName()); else EnableOK(!txtComment->GetValue().IsEmpty() || !txtSqlBox->GetText().IsEmpty() || !cbOwner->GetValue().IsEmpty()); } else { bool enable=true; CheckValid(enable, !name.IsEmpty(), _("Please specify name.")); CheckValid(enable, txtSqlBox->GetText().Length() > 14 , _("Please enter function definition.")); EnableOK(enable); } } wxString dlgExtTable::GetSql() { wxString sql, name=GetName(); if (extTable) { // edit mode if (name != extTable->GetName()) { sql += wxT("ALTER TABLE ") + extTable->GetQuotedFullIdentifier() + wxT(" RENAME TO ") + qtIdent(name) + wxT(";\n"); } } if (!extTable || txtSqlBox->GetText() != oldDefinition) { sql += wxT("CREATE EXTERNAL TABLE ") + schema->GetQuotedPrefix() + qtIdent(name) + wxT(" AS\n") + txtSqlBox->GetText() + wxT(";\n"); } if (extTable) AppendOwnerChange(sql, wxT("TABLE ") + schema->GetQuotedPrefix() + qtIdent(name)); else AppendOwnerNew(sql, wxT("TABLE ") + schema->GetQuotedPrefix() + qtIdent(name)); sql += GetGrant(wxT("r"), wxT("TABLE ") + schema->GetQuotedPrefix() + qtIdent(name)); AppendComment(sql, wxT("EXTERNAL TABLE"), schema, extTable); return sql; } bool dlgExtTable::IsUpToDate() { if (extTable && !extTable->IsUpToDate()) return false; else return true; }