mirror of
https://github.com/levinsv/pgadmin3.git
synced 2026-05-15 14:15:49 -06:00
Autocomplite, server status, publications
Добавлен контроль прав доступа на select для таблиц и представления при ипользовании автодополнения. Добавлен контроль доступа при пролучении информации о подписках. Добалена совместимость с более ранними версиями при получении информации о публикациях. При получении логов в окне "Статус сервера" добавлена проверка наличия прав на используемые функции при получении файлы логов. Мелкие правки при работе с автодополнениями в окне запросов.
This commit is contained in:
parent
f43f341ffd
commit
a77fcfcd5a
6 changed files with 207 additions and 111 deletions
|
|
@ -189,7 +189,8 @@ pgObject *pgPublicationFactory::CreateObjects(pgCollection *collection, ctlTree
|
|||
{
|
||||
wxString sql;
|
||||
pgPublication *publication = 0;
|
||||
sql=R"(with rel as (
|
||||
if (collection->GetDatabase()->BackendMinimumVersion(15, 0)) {
|
||||
sql = R"(with rel as (
|
||||
SELECT pr.prpubid,quote_ident(n.nspname)|| '.'||quote_ident(c.relname) fulltable, pg_get_expr(pr.prqual, c.oid) rowfilter, (CASE WHEN pr.prattrs IS NOT NULL THEN
|
||||
pg_catalog.array_to_string( ARRAY(SELECT attname
|
||||
FROM
|
||||
|
|
@ -207,6 +208,27 @@ p.pubviaroot,pt.rowfilter,pt.cols,pn.slist from pg_publication p
|
|||
LEFT JOIN rel pt ON pt.prpubid = p.oid
|
||||
LEFT JOIN shs pn ON p.oid = pn.pnpubid
|
||||
)";
|
||||
}
|
||||
else {
|
||||
sql = R"(with rel as (
|
||||
SELECT pr.prpubid,quote_ident(n.nspname)|| '.'||quote_ident(c.relname) fulltable, ''::text rowfilter, (CASE WHEN pr.prattrs IS NOT NULL THEN
|
||||
pg_catalog.array_to_string( ARRAY(SELECT attname
|
||||
FROM
|
||||
pg_catalog.generate_series(0, pg_catalog.array_upper(pr.prattrs::pg_catalog.int2[], 1)) s,
|
||||
pg_catalog.pg_attribute
|
||||
WHERE attrelid = c.oid AND attnum = prattrs[s]), ', ')
|
||||
ELSE NULL END) cols
|
||||
FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid
|
||||
JOIN (select oid, prpubid, prrelid, ''::text prqual, null::int2vector prattrs from pg_catalog.pg_publication_rel pr ) pr ON c.oid = pr.prrelid
|
||||
), shs as (
|
||||
select 0 pnpubid,''::text slist
|
||||
)
|
||||
select p.oid,p.pubname,pt.fulltable,pg_get_userbyid(p.pubowner) AS owner, p.puballtables, p.pubinsert, p.pubupdate, p.pubdelete, obj_description(p.oid,'pg_publication') AS comment,
|
||||
p.pubviaroot,pt.rowfilter,pt.cols,pn.slist from pg_publication p
|
||||
LEFT JOIN rel pt ON pt.prpubid = p.oid
|
||||
LEFT JOIN shs pn ON p.oid = pn.pnpubid
|
||||
)";
|
||||
}
|
||||
sql = sql + restriction + wxT("\n")
|
||||
wxT(" ORDER BY p.pubname,pt.fulltable");
|
||||
pgSet *publications = collection->GetDatabase()->ExecuteSet(sql);
|
||||
|
|
|
|||
|
|
@ -144,46 +144,49 @@ pgObject *pgSubscriptionFactory::CreateObjects(pgCollection *collection, ctlTree
|
|||
{
|
||||
wxString sql;
|
||||
pgSubscription *subscription = 0;
|
||||
bool superu=collection->GetDatabase()->GetConnection()->IsSuperuser();
|
||||
//bool superu=collection->GetDatabase()->GetConnection()->IsSuperuser();
|
||||
bool superu = collection->GetServer()->GetSuperUser();
|
||||
//wxString dbname=collection->GetDatabase()->GetConnection()->GetDbOid;
|
||||
OID db=collection->GetDatabase()->GetConnection()->GetDbOid();
|
||||
sql = wxT("select oid,subname,pg_get_userbyid(subowner) AS \"owner\",subenabled,subconninfo,subslotname,subsynccommit,subpublications,obj_description(oid,'pg_subscription') as comment from pg_subscription where subdbid=")
|
||||
+NumToStr(db)+ wxT("\n")
|
||||
+ restriction + wxT("\n");
|
||||
pgSet *subscriptions = collection->GetDatabase()->ExecuteSet(sql);
|
||||
if (superu) {
|
||||
pgSet* subscriptions = collection->GetDatabase()->ExecuteSet(sql);
|
||||
|
||||
if (subscriptions)
|
||||
{
|
||||
while (!subscriptions->Eof())
|
||||
if (subscriptions)
|
||||
{
|
||||
wxString tmp;
|
||||
tmp = subscriptions->GetVal(wxT("subpublications"));
|
||||
tmp.Replace(wxT("{"), wxT(""));
|
||||
tmp.Replace(wxT("}"), wxT(""));
|
||||
|
||||
subscription = new pgSubscription(subscriptions->GetVal(wxT("subname")));
|
||||
subscription->iSetDatabase(collection->GetDatabase());
|
||||
subscription->iSetOid(subscriptions->GetOid(wxT("oid")));
|
||||
subscription->iSetOwner(subscriptions->GetVal(wxT("owner")));
|
||||
subscription->iSetPubStr(tmp);
|
||||
subscription->iSetConnInfo(subscriptions->GetVal(wxT("subconninfo")));
|
||||
subscription->iSetSlotName(subscriptions->GetVal(wxT("subslotname")));
|
||||
//subscription->iSetName(subscriptions->GetVal(wxT("subname"));
|
||||
subscription->iSetIsEnabled(subscriptions->GetBool(wxT("subenabled")));
|
||||
subscription->iSetIsSyncCommit(subscriptions->GetVal(wxT("subsynccommit")));
|
||||
subscription->iSetComment(subscriptions->GetVal(wxT("comment")));
|
||||
|
||||
if (browser)
|
||||
while (!subscriptions->Eof())
|
||||
{
|
||||
browser->AppendObject(collection, subscription);
|
||||
wxString tmp;
|
||||
tmp = subscriptions->GetVal(wxT("subpublications"));
|
||||
tmp.Replace(wxT("{"), wxT(""));
|
||||
tmp.Replace(wxT("}"), wxT(""));
|
||||
|
||||
subscriptions->MoveNext();
|
||||
subscription = new pgSubscription(subscriptions->GetVal(wxT("subname")));
|
||||
subscription->iSetDatabase(collection->GetDatabase());
|
||||
subscription->iSetOid(subscriptions->GetOid(wxT("oid")));
|
||||
subscription->iSetOwner(subscriptions->GetVal(wxT("owner")));
|
||||
subscription->iSetPubStr(tmp);
|
||||
subscription->iSetConnInfo(subscriptions->GetVal(wxT("subconninfo")));
|
||||
subscription->iSetSlotName(subscriptions->GetVal(wxT("subslotname")));
|
||||
//subscription->iSetName(subscriptions->GetVal(wxT("subname"));
|
||||
subscription->iSetIsEnabled(subscriptions->GetBool(wxT("subenabled")));
|
||||
subscription->iSetIsSyncCommit(subscriptions->GetVal(wxT("subsynccommit")));
|
||||
subscription->iSetComment(subscriptions->GetVal(wxT("comment")));
|
||||
|
||||
if (browser)
|
||||
{
|
||||
browser->AppendObject(collection, subscription);
|
||||
|
||||
subscriptions->MoveNext();
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
delete subscriptions;
|
||||
delete subscriptions;
|
||||
}
|
||||
}
|
||||
return subscription;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue