26 #include <basic/options/option.hh>
27 #include <basic/options/keys/inout.OptionKeys.gen.hh>
28 #include <basic/options/keys/out.OptionKeys.gen.hh>
29 #include <basic/Tracer.hh>
30 #include <basic/database/sql_utils.hh>
31 #include <utility/exit.hh>
32 #include <utility/vector1.hh>
33 #include <utility/sql_database/DatabaseSessionManager.hh>
36 #include <cppdb/frontend.h>
43 static basic::Tracer
tr(
"protocols.features.DatabaseJobOutputter");
57 using utility::sql_database::DatabaseSessionManager;
58 using utility::sql_database::sessionOP;
59 using basic::database::get_db_session;
64 protocols::jd2::FileJobOutputter(),
82 using namespace basic::options;
83 using namespace basic::options::OptionKeys;
85 if (option.has(inout::dbms::database_name) &&
86 option[inout::dbms::database_name].user()){
90 if (option.has(inout::dbms::pq_schema) &&
91 option[inout::dbms::pq_schema].user()){
99 using namespace basic::options;
100 using namespace basic::options::OptionKeys;
101 option.add_relevant( inout::dbms::database_name );
102 option.add_relevant( inout::dbms::pq_schema );
103 option.add_relevant( inout::dbms::host );
104 option.add_relevant( inout::dbms::user );
105 option.add_relevant( inout::dbms::password );
106 option.add_relevant( inout::dbms::port );
107 option.add_relevant( inout::dbms::separate_db_per_mpi_process );
108 option.add_relevant( out::resume_batch);
114 string const & database_pq_schema
126 string const & database_name
134 utility_exit_with_message(
135 "To use the DatabaseJobInputter, please specify the database "
136 "where the input is data is stored, eg. via the -inout:dbms:database_name "
137 "<database_name> option system flag.");
177 using namespace basic::options;
178 using namespace basic::options::OptionKeys;
181 if ( job->completed() ) {
192 if(option[out::resume_batch].user())
195 core::Size placeholder_count = batch_ids.size();
197 for(
Size j = 1; j < placeholder_count; ++j)
199 placeholder_block +=
",?";
201 placeholder_block +=
")";
203 std::string job_completion_string =
"SELECT count(*) FROM sampled_structures WHERE tag=? AND batch_id IN " +placeholder_block+
";";
204 cppdb::statement job_completion_statement(basic::database::safely_prepare_statement(job_completion_string,db_session));
206 for(
Size i = 1; i <= batch_ids.size();++i)
209 job_completion_statement.bind(column_index,batch_ids[i]);
211 res = basic::database::safely_read_from_database(job_completion_statement);
215 std::string job_completion_string =
"SELECT count(*) FROM sampled_structures WHERE tag=? and batch_id = ?;";
216 cppdb::statement job_completion_statement(basic::database::safely_prepare_statement(job_completion_string,db_session));
219 res = basic::database::safely_read_from_database(job_completion_statement);
223 Size already_written;
224 res >> already_written;
225 return already_written;
241 return "DatabaseJobOutputter";