Index: pgagent.sql =================================================================== RCS file: /projects/pgagent/pgagent.sql,v retrieving revision 1.2 retrieving revision 1.3 diff -Lpgagent.sql -Lpgagent.sql -u -w -r1.2 -r1.3 --- pgagent.sql +++ pgagent.sql @@ -8,62 +8,64 @@ // */ -COMMENT ON SCHEMA pg_admin IS 'pgAdmin/pgAgent system tables'; +CREATE SCHEMA pgadmin; +COMMENT ON SCHEMA pgadmin IS 'pgAdmin/pgAgent system tables'; -CREATE TABLE pg_admin.pga_jobagent ( +CREATE TABLE pgadmin.pga_jobagent ( jagpid int4 NOT NULL PRIMARY KEY, logintime timestamptz NOT NULL DEFAULT current_timestamp, station text NOT NULL ) WITHOUT OIDS; -COMMENT ON TABLE pg_admin.pga_jobagent IS 'active job agents'; +COMMENT ON TABLE pgadmin.pga_jobagent IS 'active job agents'; -CREATE TABLE pg_admin.pga_jobclass ( +CREATE TABLE pgadmin.pga_jobclass ( +jclid serial NOT NULL PRIMARY KEY, jclname text NOT NULL -) WITH OIDS; -CREATE UNIQUE INDEX pga_jobclass_oid ON pg_admin.pga_jobclass(oid); -CREATE UNIQUE INDEX pga_jobclass_name ON pg_admin.pga_jobclass(jclname); -COMMENT ON TABLE pg_admin.pga_jobclass IS 'Job classification'; +) WITHOUT OIDS; +CREATE UNIQUE INDEX pga_jobclass_name ON pgadmin.pga_jobclass(jclname); +COMMENT ON TABLE pgadmin.pga_jobclass IS 'Job classification'; -CREATE TABLE pg_admin.pga_job ( -jobjcloid oid NOT NULL REFERENCES pg_admin.pga_jobclass (oid) ON DELETE RESTRICT ON UPDATE RESTRICT, +CREATE TABLE pgadmin.pga_job ( +jobid serial NOT NULL PRIMARY KEY, +jobjclid int4 NOT NULL REFERENCES pgadmin.pga_jobclass (jclid) ON DELETE RESTRICT ON UPDATE RESTRICT, jobname text NOT NULL, jobdesc text NOT NULL DEFAULT '', jobenabled bool NOT NULL DEFAULT true, jobcreated timestamptz NOT NULL DEFAULT current_timestamp, jobchanged timestamptz NOT NULL DEFAULT current_timestamp, -jobagentid int4 NULL REFERENCES pg_admin.pga_jobagent(jagpid) ON DELETE SET NULL ON UPDATE RESTRICT, +jobagentid int4 NULL REFERENCES pgadmin.pga_jobagent(jagpid) ON DELETE SET NULL ON UPDATE RESTRICT, jobnextrun timestamptz NULL, joblastrun timestamptz NULL -); -CREATE UNIQUE INDEX pga_job_oid ON pg_admin.pga_job(oid); -COMMENT ON TABLE pg_admin.pga_job IS 'Job main entry'; -COMMENT ON COLUMN pg_admin.pga_job.jobagentid IS 'Agent that currently executes this job.'; +) WITHOUT OIDS; +COMMENT ON TABLE pgadmin.pga_job IS 'Job main entry'; +COMMENT ON COLUMN pgadmin.pga_job.jobagentid IS 'Agent that currently executes this job.'; -CREATE TABLE pg_admin.pga_jobstep ( -jstjoboid oid NOT NULL REFERENCES pg_admin.pga_job (oid) ON DELETE CASCADE ON UPDATE RESTRICT, +CREATE TABLE pgadmin.pga_jobstep ( +jstid serial NOT NULL PRIMARY KEY, +jstjobid int4 NOT NULL REFERENCES pgadmin.pga_job (jobid) ON DELETE CASCADE ON UPDATE RESTRICT, jstname text NOT NULL, jstdesc text NOT NULL DEFAULT '', jstenabled bool NOT NULL DEFAULT true, jstkind char NOT NULL CHECK (jstkind IN ('b', 's')), -- batch, sql jstcode text NOT NULL, -jstdboid oid NULL, -- REFERENCES pg_database(oid) ON DELETE CASCADE ON UPDATE RESTRICT, +jstdbname name NULL, -- REFERENCES pg_database(datname) ON DELETE CASCADE ON UPDATE RESTRICT, jstonerror char NOT NULL CHECK (jstonerror IN ('f', 's', 'i')) DEFAULT 'f', -- fail, success, ignore jscnextrun timestamptz NULL -) WITH OIDS; -CREATE UNIQUE INDEX pga_jobstep_oid ON pg_admin.pga_jobstep(oid); -CREATE INDEX pga_jobstep_joboid ON pg_admin.pga_jobstep(jstjoboid); -COMMENT ON TABLE pg_admin.pga_jobstep IS 'Job step to be executed'; -COMMENT ON COLUMN pg_admin.pga_jobstep.jstkind IS 'Kind of jobstep: s=sql, b=batch'; -COMMENT ON COLUMN pg_admin.pga_jobstep.jstonerror IS 'What to do if step returns an error: f=fail the job, s=mark step as succeeded and continue, i=mark as fail but ignore it and proceed'; +) WITHOUT OIDS; +CREATE INDEX pga_jobstep_jobid ON pgadmin.pga_jobstep(jstjobid); +COMMENT ON TABLE pgadmin.pga_jobstep IS 'Job step to be executed'; +COMMENT ON COLUMN pgadmin.pga_jobstep.jstkind IS 'Kind of jobstep: s=sql, b=batch'; +COMMENT ON COLUMN pgadmin.pga_jobstep.jstonerror IS 'What to do if step returns an error: f=fail the job, s=mark step as succeeded and continue, i=mark as fail but ignore it and proceed'; -CREATE TABLE pg_admin.pga_schedule ( -jscjoboid oid NOT NULL REFERENCES pg_admin.pga_job (oid) ON DELETE CASCADE ON UPDATE RESTRICT, +CREATE TABLE pgadmin.pga_schedule ( +jscid serial NOT NULL PRIMARY KEY, +jscjobid int4 NOT NULL REFERENCES pgadmin.pga_job (jobid) ON DELETE CASCADE ON UPDATE RESTRICT, jscname text NOT NULL, jscdesc text NOT NULL DEFAULT '', jscenabled bool NOT NULL DEFAULT true, @@ -72,46 +74,46 @@ jsckind char NOT NULL CHECK (jsckind IN ('n', 's', 'd', 'w', 'm', 'y')) DEFAULT 'n', -- normal, single, daily, weekly, monthly, yearly jscsched timestamptz NULL, jsclist interval[] NOT NULL -) WITH OIDS; -CREATE UNIQUE INDEX pga_schedule_oid ON pg_admin.pga_schedule(oid); -CREATE INDEX pga_jobschedule_joboid ON pg_admin.pga_schedule(jscjoboid); -COMMENT ON TABLE pg_admin.pga_schedule IS 'Schedule for a job'; -COMMENT ON COLUMN pg_admin.pga_schedule.jsckind IS 'Kind of schedule: normal periodical (jsclist has one entry), single, daily, weekly, monthly, yearly (jsclist contains list of intervals in period)'; +) WITHOUT OIDS; +CREATE INDEX pga_jobschedule_jobid ON pgadmin.pga_schedule(jscjobid); +COMMENT ON TABLE pgadmin.pga_schedule IS 'Schedule for a job'; +COMMENT ON COLUMN pgadmin.pga_schedule.jsckind IS 'Kind of schedule: normal periodical (jsclist has one entry), single, daily, weekly, monthly, yearly (jsclist contains list of intervals in period)'; -CREATE TABLE pg_admin.pga_jobprotocol ( -jprjoboid oid NOT NULL REFERENCES pg_admin.pga_job (oid) ON DELETE CASCADE ON UPDATE RESTRICT, +CREATE TABLE pgadmin.pga_jobprotocol ( +jprid serial NOT NULL PRIMARY KEY, +jprjobid int4 NOT NULL REFERENCES pgadmin.pga_job (jobid) ON DELETE CASCADE ON UPDATE RESTRICT, jprstatus char NOT NULL CHECK (jprstatus IN ('r', 's', 'f', 'i', 'd')) DEFAULT 'r', -- running, success, failed, internal failure, died jprstart timestamptz NOT NULL DEFAULT current_timestamp, jprduration interval NULL -) WITH OIDS; -CREATE UNIQUE INDEX pga_jobprotocol_oid ON pg_admin.pga_jobprotocol(oid); -CREATE INDEX pga_jobprotocol_joboid ON pg_admin.pga_jobprotocol(jprjoboid); -COMMENT ON TABLE pg_admin.pga_jobprotocol IS 'Protocol of a job that was run.'; -COMMENT ON COLUMN pg_admin.pga_jobprotocol.jprstatus IS 'Status of job: r=running, s=successfully finished, f=failed'; +) WITHOUT OIDS; +CREATE INDEX pga_jobprotocol_jobid ON pgadmin.pga_jobprotocol(jprjobid); +COMMENT ON TABLE pgadmin.pga_jobprotocol IS 'Protocol of a job that was run.'; +COMMENT ON COLUMN pgadmin.pga_jobprotocol.jprstatus IS 'Status of job: r=running, s=successfully finished, f=failed'; -CREATE TABLE pg_admin.pga_jobprotocolstep ( -jpejproid oid NOT NULL REFERENCES pg_admin.pga_jobprotocol (oid) ON DELETE CASCADE ON UPDATE RESTRICT, +CREATE TABLE pgadmin.pga_jobprotocolstep ( +jpeid serial NOT NULL PRIMARY KEY, +jpejprid int4 NOT NULL REFERENCES pgadmin.pga_jobprotocol (jprid) ON DELETE CASCADE ON UPDATE RESTRICT, jpedbname name NOT NULL, jpecode text NOT NULL, jpestatus char NOT NULL CHECK (jpestatus IN ('r', 's', 'i', 'f')) DEFAULT 'r', -- running, success, ignored, failed jperesult int2 NULL, jpestarted timestamptz NOT NULL DEFAULT current_timestamp, jpeduration interval NULL -) WITH OIDS; -CREATE INDEX pga_jobprotocolstep_jproid ON pg_admin.pga_jobprotocolstep(jpejproid); -COMMENT ON TABLE pg_admin.pga_jobprotocolstep IS 'Protocol of a single step in a job that was run.'; -COMMENT ON COLUMN pg_admin.pga_jobprotocolstep.jpestatus IS 'Status of job step: r=running, s=successfully finished, f=failed stopping job, i=ignored failure'; -COMMENT ON COLUMN pg_admin.pga_jobprotocolstep.jperesult IS 'Return code of job step'; +) WITHOUT OIDS; +CREATE INDEX pga_jobprotocolstep_jprid ON pgadmin.pga_jobprotocolstep(jpejprid); +COMMENT ON TABLE pgadmin.pga_jobprotocolstep IS 'Protocol of a single step in a job that was run.'; +COMMENT ON COLUMN pgadmin.pga_jobprotocolstep.jpestatus IS 'Status of job step: r=running, s=successfully finished, f=failed stopping job, i=ignored failure'; +COMMENT ON COLUMN pgadmin.pga_jobprotocolstep.jperesult IS 'Return code of job step'; -CREATE OR REPLACE FUNCTION pg_admin.pga_next_schedule(timestamptz, timestamptz, timestamptz, char, interval[]) returns timestamptz as +CREATE OR REPLACE FUNCTION pgadmin.pga_next_schedule(timestamptz, timestamptz, timestamptz, char, interval[]) returns timestamptz as ' DECLARE jscstart ALIAS FOR $1; @@ -164,7 +166,7 @@ nextrun := nextrun + jsclist[1] + period; END IF; ELSE - RAISE EXCEPTION ''pg_admin.pga_next_schedule: unknown schedule kind''; + RAISE EXCEPTION ''pgadmin.pga_next_schedule: unknown schedule kind''; END IF; RETURN nextrun; END; @@ -173,14 +175,14 @@ -CREATE OR REPLACE FUNCTION pg_admin.pga_job_trigger() RETURNS trigger AS ' +CREATE OR REPLACE FUNCTION pgadmin.pga_job_trigger() RETURNS trigger AS ' BEGIN IF NEW.jobenabled THEN IF NEW.jobnextrun IS NULL THEN SELECT INTO NEW.jobnextrun - MIN(pg_admin.pga_next_schedule(jscstart, jscend, jscsched, jsckind, jsclist)) - FROM pg_admin.pga_schedule - WHERE jscenabled AND jscjoboid=OLD.oid; + MIN(pgadmin.pga_next_schedule(jscstart, jscend, jscsched, jsckind, jsclist)) + FROM pgadmin.pga_schedule + WHERE jscenabled AND jscjobid=OLD.jobid; END IF; ELSE NEW.jobnextrun := NULL; @@ -191,23 +193,23 @@ CREATE TRIGGER pga_job_trigger BEFORE UPDATE - ON pg_admin.pga_job FOR EACH ROW - EXECUTE PROCEDURE pg_admin.pga_job_trigger(); + ON pgadmin.pga_job FOR EACH ROW + EXECUTE PROCEDURE pgadmin.pga_job_trigger(); -CREATE OR REPLACE FUNCTION pg_admin.pga_schedule_trigger() RETURNS trigger AS ' +CREATE OR REPLACE FUNCTION pgadmin.pga_schedule_trigger() RETURNS trigger AS ' BEGIN IF TG_OP = ''DELETE'' THEN -- update pga_job from remaining schedules -- the actual calculation of jobnextrun will be performed in the trigger - UPDATE pg_admin.pga_job + UPDATE pgadmin.pga_job SET jobnextrun = NULL - WHERE jobenabled AND oid=OLD.jscjoboid; + WHERE jobenabled AND jobid=OLD.jscjobid; RETURN OLD; ELSE - UPDATE pg_admin.pga_job + UPDATE pgadmin.pga_job SET jobnextrun = NULL - WHERE jobenabled AND oid=NEW.jscjoboid; + WHERE jobenabled AND jobid=NEW.jscjobid; RETURN NEW; END IF; END; @@ -216,22 +218,22 @@ CREATE TRIGGER pga_schedule_trigger AFTER INSERT OR UPDATE OR DELETE - ON pg_admin.pga_schedule FOR EACH ROW - EXECUTE PROCEDURE pg_admin.pga_schedule_trigger(); + ON pgadmin.pga_schedule FOR EACH ROW + EXECUTE PROCEDURE pgadmin.pga_schedule_trigger(); /* -delete from pg_admin.pga_jobclass; +delete from pgadmin.pga_jobclass; -insert into pg_admin.pga_jobclass (jclname) values ('misc'); +insert into pgadmin.pga_jobclass (jclname) values ('misc'); - delete from pg_admin.pga_schedule; - select * from pg_admin.pga_Schedule; + delete from pgadmin.pga_schedule; + select * from pgadmin.pga_Schedule; - insert into pg_admin.pga_schedule(jscjoboid,jscname, jscdesc, jscenabled, jscstart, jscsched, jsclist) + insert into pgadmin.pga_schedule(jscjoboid,jscname, jscdesc, jscenabled, jscstart, jscsched, jsclist) values (xxxxx, '10min', 'arbitrary 10min cycle', true, '2002-01-01', '2002-01-01', ARRAY['10 min'::interval] ); --- update pg_admin.pga_schedule set jscenabled=jscenabled +-- update pgadmin.pga_schedule set jscenabled=jscenabled */ Index: pgAgent.cpp =================================================================== RCS file: /projects/pgagent/src/pgAgent.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -Lsrc/pgAgent.cpp -Lsrc/pgAgent.cpp -u -w -r1.2 -r1.3 --- src/pgAgent.cpp +++ src/pgAgent.cpp @@ -33,7 +33,7 @@ rc = serviceConn->ExecuteVoid( "INSERT INTO pga_tmp_zombies (jagpid)\n" "SELECT jagpid\n" - " FROM pg_admin.pga_jobagent AG\n" + " FROM pgadmin.pga_jobagent AG\n" " LEFT JOIN pg_stat_activity PA ON jagpid=procpid\n" " WHERE procpid IS NULL" ); @@ -43,25 +43,26 @@ // There are orphaned agent entries // mark the jobs as aborted rc=serviceConn->ExecuteVoid( - "UPDATE pg_admin.pga_jobprotocol SET jprstatus='d'\n" + "UPDATE pgadmin.pga_jobprotocol SET jprstatus='d'\n" " FROM pga_tmp_zombies Z\n" - " JOIN pg_admin.pga_job J ON jobagentid=jagpid\n" - " JOIN pg_admin.pga_jobprotocol PR ON jprjoboid=J.oid\n" + " JOIN pgadmin.pga_job J ON jobagentid=jagpid\n" + " JOIN pgadmin.pga_jobprotocol PR ON jprjobid=J.jobid\n" " WHERE PR.jprstatus='r';\n" - "UPDATE pg_admin.pga_job SET jobagentid=NULL, jobnextrun=NULL\n" + "UPDATE pgadmin.pga_job SET jobagentid=NULL, jobnextrun=NULL\n" " FROM pga_tmp_zombies Z\n" - " JOIN pg_admin.pga_job J ON jobagentid=jagpid;\n" + " JOIN pgadmin.pga_job J ON jobagentid=jagpid;\n" - "DELETE FROM pg_admin.pga_jobagent\n" + "DELETE FROM pgadmin.pga_jobagent\n" " WHERE jagpid IN (SELECT jagpid FROM pga_tmp_zombies);\n" ); } + // TODO - station should be the hostname, not '' (?) rc=serviceConn->ExecuteVoid( - "INSERT INTO pg_admin.pga_jobagent (jagpid) SELECT pg_backend_pid()"); + "INSERT INTO pgadmin.pga_jobagent (jagpid, station) SELECT pg_backend_pid(), ''"); if (rc < 0) return rc; @@ -70,20 +71,20 @@ bool foundJobToExecute=false; DBresult *res=serviceConn->Execute( - "SELECT J.oid AS joboid\n" - " FROM pg_admin.pga_job J\n" + "SELECT J.jobid\n" + " FROM pgadmin.pga_job J\n" " WHERE jobenabled AND jobagentid IS NULL\n" " AND jobnextrun <= now()\n" " ORDER BY jobnextrun"); if (res) { - string joboid=res->GetString("joboid"); + string jobid=res->GetString("jobid"); delete res; - if (joboid != "") + if (jobid != "") { - Job job(serviceConn, joboid); + Job job(serviceConn, jobid); if (job.Runnable()) { Index: pgAgent.dsp =================================================================== RCS file: /projects/pgagent/src/pgAgent.dsp,v retrieving revision 1.3 retrieving revision 1.4 diff -Lsrc/pgAgent.dsp -Lsrc/pgAgent.dsp -u -w -r1.3 -r1.4 --- src/pgAgent.dsp +++ src/pgAgent.dsp @@ -123,10 +123,6 @@ # PROP Default_Filter "" # Begin Source File -SOURCE="..\pg_admin-schema" -# End Source File -# Begin Source File - SOURCE=..\pgagent.sql # End Source File # End Group Index: connection.cpp =================================================================== RCS file: /projects/pgagent/src/connection.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -Lsrc/connection.cpp -Lsrc/connection.cpp -u -w -r1.1 -r1.2 --- src/connection.cpp +++ src/connection.cpp @@ -263,13 +263,3 @@ return GetString(col); } - - -string DBresult::GetOid() const -{ - Oid oid=PQoidValue(result); - if (oid) - return NumToStr(oid); - else - return ""; -} Index: job.cpp =================================================================== RCS file: /projects/pgagent/src/job.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -Lsrc/job.cpp -Lsrc/job.cpp -u -w -r1.2 -r1.3 --- src/job.cpp +++ src/job.cpp @@ -16,24 +16,31 @@ Job::Job(DBconn *conn, const string &jid) { serviceConn=conn; - joboid=jid; + jobid=jid; status=""; int rc=serviceConn->ExecuteVoid( - "UPDATE pg_admin.pga_job SET jobagentid=pg_backend_pid(), joblastrun=now()\n" - " WHERE jobagentid IS NULL AND oid=" + joboid); + "UPDATE pgadmin.pga_job SET jobagentid=pg_backend_pid(), joblastrun=now()\n" + " WHERE jobagentid IS NULL AND jobid=" + jobid); if (rc == 1) { + DBresult *id=serviceConn->Execute( + "SELECT nextval('pga_jobprotocol_jprid_seq') AS id"); + if (id) + { + prtid=id->GetString("id"); + DBresult *res=serviceConn->Execute( - "INSERT INTO pg_admin.pga_jobprotocol(jprjoboid, jprstatus) " - "VALUES (" + joboid + ", 'r')"); + "INSERT INTO pgadmin.pga_jobprotocol(jprid, jprjobid, jprstatus) " + "VALUES (" + prtid + ", " + jobid + ", 'r')"); if (res) { status="r"; - prtoid=res->GetOid(); delete res; } + delete id; + } } } @@ -43,13 +50,13 @@ if (status != "") { int rc=serviceConn->ExecuteVoid( - "UPDATE pg_admin.pga_jobprotocol\n" + "UPDATE pgadmin.pga_jobprotocol\n" " SET jprstatus='" + status + "', jprduration=now() - jprstart\n" - " WHERE oid=" + prtoid + ";\n" + " WHERE jprid=" + prtid + ";\n" - "UPDATE pg_admin.pga_job\n" + "UPDATE pgadmin.pga_job\n" " SET jobagentid=NULL, jobnextrun=NULL\n" - " WHERE oid=" + joboid + " WHERE jobid=" + jobid ); } } @@ -59,11 +66,11 @@ { int rc; DBresult *steps=serviceConn->Execute( - "SELECT JS.oid, jstkind, datname, jstcode, jstonerror\n" - " FROM pg_admin.pga_jobstep JS, pg_database DB\n" - " WHERE jstenabled AND (jstdboid IS NULL OR jstdboid=DB.oid)\n" - " AND jstjoboid=" + joboid + "\n" - " ORDER BY JS.oid, jstdboid"); + "SELECT jstid, jstkind, jstdbname, jstcode, jstonerror\n" + " FROM pgadmin.pga_jobstep\n" + " WHERE jstenabled\n" + " AND jstjobid=" + jobid + "\n" + " ORDER BY jstid, jstdbname"); if (!steps) { @@ -74,21 +81,27 @@ while (steps->HasData()) { DBconn *conn; - string jpsoid, jpecode; + string jpsid, jpecode; + DBresult *id=serviceConn->Execute( + "SELECT nextval('pg_jobprotocolstep_jpeid_seq') AS id"); + if (id) + { + jpsid=id->GetString("id"); DBresult *res=serviceConn->Execute( - "INSERT INTO pg_admin.pga_jobprotocolstep(jpejproid, jpedbname, jpecode)\n" - "SELECT " + prtoid + ", '" + steps->GetString("datname") + "', jstcode\n" - " FROM pg_admin.pga_jobstep WHERE oid=" + steps->GetString("oid")); + "INSERT INTO pgadmin.pga_jobprotocolstep(jpeid, jpejprid, jpedbname, jpecode)\n" + "SELECT " + jpsid + ", " + prtid + ", '" + steps->GetString("jstdbname") + "', jstcode\n" + " FROM pgadmin.pga_jobstep WHERE jstid=" + steps->GetString("jstid")); if (res) { - jpsoid=res->GetOid(); rc=res->RowsAffected(); delete res; } else rc = -1; + } + delete id; if (rc != 1) { @@ -100,7 +113,7 @@ { case 's': { - conn=DBconn::Get(steps->GetString("datname")); + conn=DBconn::Get(steps->GetString("jstdbname")); if (conn) rc=conn->ExecuteVoid(steps->GetString("jstcode")); else @@ -127,10 +140,10 @@ stepstatus = steps->GetString("jstonerror"); rc=serviceConn->ExecuteVoid( - "UPDATE pg_admin.pga_jobprotocolstep\n" + "UPDATE pgadmin.pga_jobprotocolstep\n" " SET jpeduration = now() - jpestarted,\n" " jperesult = " + NumToStr(rc) + ", jpestatus = '" + stepstatus + "'\n" - " WHERE oid=" + jpsoid); + " WHERE jpeid=" + jpsid); if (rc != 1 || stepstatus == "f") { status = 'f'; Index: job.h =================================================================== RCS file: /projects/pgagent/src/include/job.h,v retrieving revision 1.1 retrieving revision 1.2 diff -Lsrc/include/job.h -Lsrc/include/job.h -u -w -r1.1 -r1.2 --- src/include/job.h +++ src/include/job.h @@ -22,6 +22,6 @@ protected: DBconn *serviceConn; - string joboid, prtoid; + string jobid, prtid; string status; }; \ No newline at end of file Index: connection.h =================================================================== RCS file: /projects/pgagent/src/include/connection.h,v retrieving revision 1.1 retrieving revision 1.2 diff -Lsrc/include/connection.h -Lsrc/include/connection.h -u -w -r1.1 -r1.2 --- src/include/connection.h +++ src/include/connection.h @@ -67,7 +67,6 @@ bool HasData() const { return currentRow < maxRows; } void MoveNext() { if (currentRow < maxRows) currentRow++; } - string GetOid() const; long RowsAffected() const { return atol(PQcmdTuples(result)); } protected: