diff --git a/frm/frmMaintenance.cpp b/frm/frmMaintenance.cpp
index 2ebe5e5..a82c599 100644
--- a/frm/frmMaintenance.cpp
+++ b/frm/frmMaintenance.cpp
@@ -65,6 +65,7 @@ frmMaintenance::frmMaintenance(frmMain *form, pgObject *obj) : ExecutionDialog(f
txtMessages->SetMaxLength(0L);
#endif
bool iscomprss = false;
+ wxString cmd;
if (object->GetMetaType() == PGM_INDEX || object->GetMetaType() == PGM_PRIMARYKEY || object->GetMetaType() == PGM_UNIQUE)
{
rbxAction->SetSelection(2);
@@ -74,6 +75,25 @@ frmMaintenance::frmMaintenance(frmMain *form, pgObject *obj) : ExecutionDialog(f
wxString ratio = object->GetConnection()->ExecuteScalar("select left((cfs_fragmentation("+object->GetOidStr()+")*100)::text,5)::text");
iscomprss = !(ratio == "NaN");
}
+ wxString sql = "SELECT \
+ case when(SELECT max(pronargs) FROM pg_proc WHERE proname = 'bt_index_check') = 3 then\
+ 'bt_index_check(' || c.oid || ', true,' || i.indisunique || ')'\
+ when(SELECT max(pronargs) FROM pg_proc WHERE proname = 'bt_index_check') = 2 then\
+ 'bt_index_check(' || c.oid || ', true)'\
+ else\
+ ''\
+ end\
+ FROM pg_index i\
+ JOIN pg_opclass op ON i.indclass[0] = op.oid\
+ JOIN pg_am am ON op.opcmethod = am.oid\
+ JOIN pg_class c ON i.indexrelid = c.oid\
+ JOIN pg_namespace n ON c.relnamespace = n.oid\
+ WHERE am.amname = 'btree'\
+ AND c.relpersistence != 't'\
+ AND c.relkind = 'i' AND i.indisready AND i.indisvalid and c.oid = "+object->GetOidStr();
+ cmd = object->GetConnection()->ExecuteScalar(sql);
+ cmdcheck = cmd;
+
}
if (object->GetMetaType() == PGM_TABLE) {
pgTable* t = (pgTable *)object;
@@ -81,6 +101,7 @@ frmMaintenance::frmMaintenance(frmMain *form, pgObject *obj) : ExecutionDialog(f
}
rbxAction->Enable(4, iscomprss);
+ rbxAction->Enable(5, !cmd.IsEmpty());
wxCommandEvent ev;
OnAction(ev);
}
@@ -138,6 +159,11 @@ void frmMaintenance::OnAction(wxCommandEvent &ev)
chkVerbose->SetValue(true);
chkVerbose->Enable(true);
}
+ bool isAmcheck = (rbxAction->GetSelection() == 5);
+ if (isAmcheck) {
+
+ }
+
}
@@ -240,6 +266,13 @@ wxString frmMaintenance::GetSql()
}
break;
}
+ case 5: // amchek
+ {
+ sql = wxT("SET client_min_messages = DEBUG1;select ");
+ sql += cmdcheck;
+ //wxString strindex = object->GetConnection()->ExecuteScalar("select string_agg('cfs_gc_relation('||indexrelid::text||')',',') from pg_index i where indrelid=" + object->GetOidStr() + " and cfs_fragmentation(indexrelid) between 0.01 and 1;");
+ break;
+ }
}
return sql;
diff --git a/include/frm/frmMaintenance.h b/include/frm/frmMaintenance.h
index 32cafba..675eefb 100644
--- a/include/frm/frmMaintenance.h
+++ b/include/frm/frmMaintenance.h
@@ -28,7 +28,7 @@ public:
private:
wxString GetHelpPage() const;
void OnAction(wxCommandEvent &ev);
-
+ wxString cmdcheck;
DECLARE_EVENT_TABLE()
};
diff --git a/schema/pgTrigger.cpp b/schema/pgTrigger.cpp
index a381951..5018f9f 100644
--- a/schema/pgTrigger.cpp
+++ b/schema/pgTrigger.cpp
@@ -403,7 +403,7 @@ pgObject *pgTriggerFactory::CreateObjects(pgCollection *coll, ctlTree *browser,
}
wxString trig_sql;
- trig_sql = wxT("SELECT t.oid, t.xmin, t.*, relname, CASE WHEN relkind = 'r' THEN TRUE ELSE FALSE END AS parentistable, ")+ref+
+ trig_sql = wxT("SELECT t.oid, t.xmin, encode(t.tgargs,'escape') tgargsE, t.*, relname, CASE WHEN relkind = 'r' THEN TRUE ELSE FALSE END AS parentistable, ")+ref+
wxT(" nspname, des.description, l.lanname, p.prosrc, \n")
wxT(" COALESCE(substring(pg_get_triggerdef(t.oid), 'WHEN (.*) EXECUTE PROCEDURE'), substring(pg_get_triggerdef(t.oid), 'WHEN (.*) \\$trigger')) AS whenclause\n")
wxT(" FROM pg_trigger t\n")
@@ -491,7 +491,7 @@ pgObject *pgTriggerFactory::CreateObjects(pgCollection *coll, ctlTree *browser,
trigger->iSetQuotedFullTable(collection->GetDatabase()->GetQuotedSchemaPrefix(triggers->GetVal(wxT("nspname"))) + qtIdent(triggers->GetVal(wxT("relname"))));
wxString arglist = wxEmptyString;
if (triggers->GetLong(wxT("tgnargs")) > 0)
- arglist = triggers->GetVal(wxT("tgargs"));
+ arglist = triggers->GetVal(wxT("tgargse"));
wxString args = wxEmptyString;
while (!arglist.IsEmpty())
diff --git a/ui/frmMaintenance.xrc b/ui/frmMaintenance.xrc
index 78ebfe2..c92f5b4 100644
--- a/ui/frmMaintenance.xrc
+++ b/ui/frmMaintenance.xrc
@@ -28,6 +28,7 @@
- REINDEX
- CLUSTER
- COMPRESS
+ - AMCHECK
0