@@ -24,6 +24,10 @@ pg_init(Pg::Connection &db, const char *schema)
2424 ? " stdin" sv
2525 : " NULL" sv;
2626
27+ const std::string_view set_time_modified = Pg::ColumnExists (db, schema, " jobs" , " time_modified" )
28+ ? " , time_modified=now()" sv
29+ : " " sv;
30+
2731 /* ignore jobs which are scheduled deep into the future; some
2832 Workshop clients (such as URO) do this, and it slows down
2933 the PostgreSQL query */
@@ -59,25 +63,28 @@ LIMIT 1 OFFSET $3
5963)SQL" ,
6064 3 );
6165
62- db.Prepare (" claim_job" , R"SQL(
66+ db.Prepare (" claim_job" , fmt::format ( R"SQL(
6367UPDATE jobs
6468SET node_name=$1, node_timeout=now()+$3::INTERVAL, time_started=now()
69+ {}
6570WHERE id=$2 AND node_name IS NULL AND enabled
66- )SQL" ,
71+ )SQL" , set_time_modified). c_str (),
6772 3 );
6873
69- db.Prepare (" set_job_progress" , R"SQL(
74+ db.Prepare (" set_job_progress" , fmt::format ( R"SQL(
7075UPDATE jobs
7176SET progress=$2, node_timeout=now()+$3::INTERVAL
77+ {}
7278WHERE id=$1
73- )SQL" ,
79+ )SQL" , set_time_modified). c_str (),
7480 3 );
7581
76- db.Prepare (" set_job_done" , R"SQL(
82+ db.Prepare (" set_job_done" , fmt::format ( R"SQL(
7783UPDATE jobs
7884SET time_done=now(), progress=100, exit_status=$2, log=$3
85+ {}
7986WHERE id=$1
80- )SQL" ,
87+ )SQL" , set_time_modified). c_str (),
8188 3 );
8289
8390 db.Prepare (" add_cpu_usage" , R"SQL(
@@ -87,20 +94,22 @@ WHERE id=$1
8794)SQL" ,
8895 2 );
8996
90- db.Prepare (" release_jobs" , R"SQL(
97+ db.Prepare (" release_jobs" , fmt::format ( R"SQL(
9198UPDATE jobs
9299SET node_name=NULL, node_timeout=NULL, progress=0
100+ {}
93101WHERE node_name=$1 AND time_done IS NULL AND exit_status IS NULL
94- )SQL" ,
102+ )SQL" , set_time_modified). c_str (),
95103 1 );
96104
97- db.Prepare (" expire_jobs" , R"SQL(
105+ db.Prepare (" expire_jobs" , fmt::format ( R"SQL(
98106UPDATE jobs
99107SET node_name=NULL, node_timeout=NULL, progress=0
108+ {}
100109WHERE time_done IS NULL AND exit_status IS NULL AND
101110node_name IS NOT NULL AND node_name <> $1 AND
102111node_timeout IS NOT NULL AND now() > node_timeout
103- )SQL" ,
112+ )SQL" , set_time_modified). c_str (),
104113 1 );
105114
106115 db.Prepare (" set_env" , R"SQL(
@@ -110,22 +119,24 @@ WHERE id=$1
110119)SQL" ,
111120 3 );
112121
113- db.Prepare (" rollback_job" , R"SQL(
122+ db.Prepare (" rollback_job" , fmt::format ( R"SQL(
114123UPDATE jobs
115124SET node_name=NULL, node_timeout=NULL, progress=0
125+ {}
116126WHERE id=$1 AND node_name IS NOT NULL
117127AND time_done IS NULL
118- )SQL" ,
128+ )SQL" , set_time_modified). c_str (),
119129 1 );
120130
121- db.Prepare (" again_job" , R"SQL(
131+ db.Prepare (" again_job" , fmt::format ( R"SQL(
122132UPDATE jobs
123133SET node_name=NULL, node_timeout=NULL, progress=0
124134, log=$3
125135, scheduled_time=NOW() + $2 * '1 second'::interval
136+ {}
126137WHERE id=$1 AND node_name IS NOT NULL
127138AND time_done IS NULL
128- )SQL" ,
139+ )SQL" , set_time_modified). c_str (),
129140 3 );
130141
131142 db.Prepare (" reap_finished_jobs" , R"SQL(
0 commit comments