wxString pgForeignKey::GetDefinition() { wxString sql; sql = wxT("(") + GetQuotedFkColumns() + wxT(")\n REFERENCES ") + GetQuotedSchemaPrefix(GetRefSchema()) + qtIdent(GetReferences()) + wxT(" (") + GetQuotedRefColumns() + wxT(")"); if (GetDatabase()->BackendMinimumVersion(7, 4) || GetMatch() == wxT("FULL")) sql += wxT(" MATCH ") + GetMatch(); sql += wxT("\n ON UPDATE ") + GetOnUpdate() + wxT(" ON DELETE ") + GetOnDelete(); if (GetDeferrable()) { sql += wxT(" DEFERRABLE INITIALLY "); if (GetDeferred()) sql += wxT("DEFERRED"); else sql += wxT("IMMEDIATE"); } if (GetDatabase()->BackendMinimumVersion(9, 1) && !GetValid()) sql += wxT("\n NOT VALID"); return sql; }
wxString pgTrigger::GetSql(ctlTree *browser) { if (sql.IsNull() && (this->triggerFunction || GetLanguage() == wxT("edbspl"))) { sql = wxT("-- Trigger: ") + GetName() + wxT(" on ") + GetQuotedFullTable() + wxT("\n\n") + wxT("-- DROP TRIGGER ") + qtIdent(GetName()) + wxT(" ON ") + GetQuotedFullTable() + wxT(";\n\n"); if (GetLanguage() == wxT("edbspl")) sql += wxT("CREATE OR REPLACE TRIGGER "); else if (GetConnection()->BackendMinimumVersion(8, 2) && GetIsConstraint()) sql += wxT("CREATE CONSTRAINT TRIGGER "); else sql += wxT("CREATE TRIGGER "); sql += qtIdent(GetName()) + wxT("\n ") + GetFireWhen() + wxT(" ") + GetEvent(); sql += wxT("\n ON ") + GetQuotedFullTable(); if (GetDeferrable()) { sql += wxT("\n DEFERRABLE INITIALLY "); if (GetDeferred()) sql += wxT("DEFERRED"); else sql += wxT("IMMEDIATE"); } sql += wxT("\n FOR EACH ") + GetForEach(); if (GetConnection()->BackendMinimumVersion(8, 5) && !GetWhen().IsEmpty()) sql += wxT("\n WHEN (") + GetWhen() + wxT(")"); if (GetLanguage() == wxT("edbspl")) { sql += wxT("\n") + GetSource(); if (!sql.Trim().EndsWith(wxT(";"))) sql = sql.Trim() + wxT(";"); sql += wxT("\n"); } else { sql += wxT("\n EXECUTE PROCEDURE ") + triggerFunction->GetQuotedFullIdentifier() + wxT("(") + GetArguments() + wxT(")") + wxT(";\n"); } if (!GetEnabled()) { sql += wxT("ALTER TABLE ") + GetQuotedFullTable() + wxT(" ") + wxT("DISABLE TRIGGER ") + GetQuotedIdentifier() + wxT(";\n"); } if (!GetComment().IsEmpty()) sql += wxT("COMMENT ON TRIGGER ") + GetQuotedIdentifier() + wxT(" ON ") + GetQuotedFullTable() + wxT(" IS ") + qtDbString(GetComment()) + wxT(";\n"); } return sql; }
void pgForeignKey::ShowTreeDetail(ctlTree *browser, frmMain *form, ctlListView *properties, ctlSQLBox *sqlPane) { if (!expandedKids) { expandedKids = true; wxStringTokenizer c1l(GetConkey(), wxT(",")); wxStringTokenizer c2l(GetConfkey(), wxT(",")); wxString c1, c2; // resolve column names while (c1l.HasMoreTokens()) { c1 = c1l.GetNextToken(); c2 = c2l.GetNextToken(); pgSet *set = ExecuteSet( wxT("SELECT a1.attname as conattname, a2.attname as confattname\n") wxT(" FROM pg_attribute a1, pg_attribute a2\n") wxT(" WHERE a1.attrelid=") + GetTableOidStr() + wxT(" AND a1.attnum=") + c1 + wxT("\n") wxT(" AND a2.attrelid=") + GetRelTableOidStr() + wxT(" AND a2.attnum=") + c2); if (set) { if (!fkColumns.IsNull()) { fkColumns += wxT(", "); refColumns += wxT(", "); quotedFkColumns += wxT(", "); quotedRefColumns += wxT(", "); } fkColumns += set->GetVal(0); refColumns += set->GetVal(1); quotedFkColumns += qtIdent(set->GetVal(0)); quotedRefColumns += qtIdent(set->GetVal(1)); delete set; } } wxTreeItemId item = browser->GetItemParent(GetId()); while (item) { pgTable *table = (pgTable *)browser->GetObject(item); if (table->IsCreatedBy(tableFactory)) { coveringIndex = table->GetCoveringIndex(browser, fkColumns); break; } item = browser->GetItemParent(item); } } if (properties) { CreateListColumns(properties); properties->AppendItem(_("Name"), GetName()); properties->AppendItem(_("OID"), NumToStr(GetOid())); properties->AppendItem(_("Child columns"), GetFkColumns()); properties->AppendItem(_("References"), GetReferences() + wxT("(") + GetRefColumns() + wxT(")")); properties->AppendItem(_("Covering index"), GetCoveringIndex()); properties->AppendItem(_("Match type"), GetMatch()); properties->AppendItem(_("On update"), GetOnUpdate()); properties->AppendItem(_("On delete"), GetOnDelete()); properties->AppendItem(_("Deferrable?"), BoolToYesNo(GetDeferrable())); if (GetDeferrable()) properties->AppendItem(_("Initially?"), GetDeferred() ? wxT("DEFERRED") : wxT("IMMEDIATE")); if (GetDatabase()->BackendMinimumVersion(9, 1)) properties->AppendItem(_("Valid?"), BoolToYesNo(GetValid())); properties->AppendItem(_("System foreign key?"), BoolToYesNo(GetSystemObject())); properties->AppendItem(_("Comment"), firstLineOnly(GetComment())); } }