Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JobDataFeatures.cc
Go to the documentation of this file.
1 // -*- mode:c++;tab-width:2;indent-tabs-mode:t;show-trailing-whitespace:t;rm-trailing-spaces:t -*-
2 // vi: set ts=2 noet:
3 //
4 // (c) Copyright Rosetta Commons Member Institutions.
5 // (c) This file is part of the Rosetta software suite and is made available under license.
6 // (c) The Rosetta software is developed by the contributing members of the Rosetta Commons.
7 // (c) For more information, see http://www.rosettacommons.org. Questions about this can be
8 // (c) addressed to University of Washington UW TechTransfer, email: license@u.washington.edu.
9 
10 /// @file src/protocols/features/JobDataFeatures.cc
11 /// @author Sam DeLuca
12 
13 //unit headers
15 
16 
17 //platform headers
18 #include <basic/options/option.hh>
19 #include <basic/options/keys/inout.OptionKeys.gen.hh>
21 #include <basic/database/sql_utils.hh>
22 #include <basic/database/schema_generator/PrimaryKey.hh>
23 #include <basic/database/schema_generator/ForeignKey.hh>
24 #include <basic/database/schema_generator/Column.hh>
25 #include <basic/database/schema_generator/Schema.hh>
26 #include <basic/database/schema_generator/Constraint.hh>
27 #include <basic/options/option.hh>
28 #include <basic/options/keys/out.OptionKeys.gen.hh>
29 #include <basic/options/keys/inout.OptionKeys.gen.hh>
30 #include <basic/database/insert_statement_generator/InsertGenerator.hh>
31 #include <basic/database/insert_statement_generator/RowData.hh>
32 
33 
34 //External
35 #include <boost/uuid/uuid.hpp>
36 #include <boost/uuid/uuid_io.hpp>
37 
38 //external headers
39 #include <cppdb/frontend.h>
40 
41 #include <string>
42 
43 #include <protocols/jd2/Job.hh>
44 #include <utility/vector1.hh>
45 #include <utility/tools/make_vector.hh>
46 
47 
48 namespace protocols {
49 namespace features {
50 
51 using basic::database::table_exists;
52 using basic::database::insert_statement_generator::InsertGenerator;
53 using basic::database::insert_statement_generator::RowDataBaseOP;
54 using basic::database::insert_statement_generator::RowData;
55 
57 
59 
61 
63 {
64  return "JobDataFeatures";
65 }
66 
67 void
68 JobDataFeatures::write_schema_to_db(utility::sql_database::sessionOP db_session) const{
69 
70  using namespace basic::database::schema_generator;
71  Column struct_id("struct_id", new DbUUID(), false /*not null*/, false /*don't autoincrement*/);
72  Column data_key("data_key", new DbText(255));
73 
74  utility::vector1<Column> primary_columns;
75  primary_columns.push_back(struct_id);
76  primary_columns.push_back(data_key);
77  PrimaryKey primary_key(primary_columns);
78 
79  Schema job_string_data("job_string_data",primary_key);
80  job_string_data.add_foreign_key(ForeignKey(struct_id, "structures", "struct_id", true /*defer*/));
81 
82  job_string_data.write(db_session);
83 
84  Schema job_string_string_data("job_string_string_data",primary_key);
85  job_string_string_data.add_foreign_key(ForeignKey(struct_id, "structures", "struct_id", true /*defer*/));
86  job_string_string_data.add_column(Column("data_value", new DbText()));
87 
88  job_string_string_data.write(db_session);
89 
90  Schema job_string_real_data("job_string_real_data",primary_key);
91  job_string_real_data.add_foreign_key(ForeignKey(struct_id, "structures", "struct_id", true /*defer*/));
92  job_string_real_data.add_column(Column("data_value", new DbReal()));
93 
94  job_string_real_data.write(db_session);
95 
96 }
97 
100  utility::vector1<std::string> dependencies;
101  dependencies.push_back("StructureFeatures");
102  return dependencies;
103 }
104 
105 
108  core::pose::Pose const & /*pose */,
109  utility::vector1<bool> const & /*relevant_residues*/,
110  boost::uuids::uuid struct_id,
111  utility::sql_database::sessionOP db_session
112 )
113 {
115  insert_string_rows(struct_id,db_session,job);
116  insert_string_string_rows(struct_id,db_session,job);
117  insert_string_real_rows(struct_id,db_session,job);
118  return 0;
119 }
120 
121 void
123  utility::sql_database::sessionOP db_session,
124  boost::uuids::uuid struct_id,
125  core::pose::Pose & pose
126 ){
127  load_string_data(db_session, struct_id, pose);
128  load_string_string_data(db_session, struct_id, pose);
129  load_string_real_data(db_session, struct_id, pose);
130 }
131 
133  boost::uuids::uuid struct_id,
134  utility::sql_database::sessionOP db_session
135  )
136 {
137 
138  std::string delete_js_string = "DELETE FROM job_string_data WHERE struct_id = ?;\n";
139  cppdb::statement delete_js_statement(basic::database::safely_prepare_statement(delete_js_string,db_session));
140  delete_js_statement.bind(1,struct_id);
141  basic::database::safely_write_to_database(delete_js_statement);
142 
143  std::string delete_ss_string = "DELETE FROM job_string_string_data WHERE struct_id = ?;\n";
144  cppdb::statement delete_ss_statement(basic::database::safely_prepare_statement(delete_ss_string,db_session));
145  delete_ss_statement.bind(1,struct_id);
146  basic::database::safely_write_to_database(delete_ss_statement);
147 
148  std::string delete_sr_string = "DELETE FROM job_string_real_data WHERE struct_id = ?;";
149  cppdb::statement delete_sr_statement(basic::database::safely_prepare_statement(delete_sr_string,db_session));
150  delete_sr_statement.bind(1,struct_id);
151  basic::database::safely_write_to_database(delete_sr_statement);
152 
153 }
154 
155 void JobDataFeatures::insert_string_rows(boost::uuids::uuid struct_id, utility::sql_database::sessionOP db_session, protocols::jd2::JobCOP job) const
156 {
157 
158  InsertGenerator string_insert("job_string_data");
159  string_insert.add_column("struct_id");
160  string_insert.add_column("data_key");
161 
162  protocols::jd2::Job::Strings::const_iterator it(job->output_strings_begin());
163 
164  RowDataBaseOP struct_id_data = new RowData<boost::uuids::uuid>("struct_id",struct_id);
165  for(; it != job->output_strings_end(); ++it)
166  {
167 
168  RowDataBaseOP string_data = new RowData<std::string>("data_key",*it);
169 
170  string_insert.add_row(utility::tools::make_vector(struct_id_data,string_data));
171  }
172 
173  string_insert.write_to_database(db_session);
174 
175 }
176 
177 void
179  utility::sql_database::sessionOP db_session,
180  boost::uuids::uuid struct_id,
182 ){
183  if(!table_exists(db_session, "job_string_data")) return;
184 
185  std::string statement_string =
186  "SELECT\n"
187  " data_key\n"
188  "FROM\n"
189  " job_string_data\n"
190  "WHERE\n"
191  " job_string_data.struct_id = ?;";
192  cppdb::statement stmt(basic::database::safely_prepare_statement(statement_string,db_session));
193  stmt.bind(1,struct_id);
194  cppdb::result res(basic::database::safely_read_from_database(stmt));
195 
196  while(res.next()){
197  std::string data_key;
198  res >> data_key;
200  job->add_string(data_key);
201  }
202 }
203 
204 void JobDataFeatures::insert_string_string_rows(boost::uuids::uuid struct_id, utility::sql_database::sessionOP db_session, protocols::jd2::JobCOP job) const
205 {
206 
207  InsertGenerator string_string_insert("job_string_string_data");
208  string_string_insert.add_column("struct_id");
209  string_string_insert.add_column("data_key");
210  string_string_insert.add_column("data_value");
211 
212  protocols::jd2::Job::StringStringPairs::const_iterator it(job->output_string_string_pairs_begin());
213 
214  RowDataBaseOP struct_id_data = new RowData<boost::uuids::uuid>("struct_id",struct_id);
215 
216  for(; it != job->output_string_string_pairs_end();++it)
217  {
218 
219  RowDataBaseOP key_data = new RowData<std::string>("data_key",it->first);
220  RowDataBaseOP value_data = new RowData<std::string>("data_value",it->second);
221 
222  string_string_insert.add_row(utility::tools::make_vector(struct_id_data,key_data,value_data));
223  }
224 
225  string_string_insert.write_to_database(db_session);
226 
227 }
228 
229 void
231  utility::sql_database::sessionOP db_session,
232  boost::uuids::uuid struct_id,
234 ){
235  if(!table_exists(db_session, "job_string_string_data")) return;
236  std::string statement_string =
237  "SELECT\n"
238  " data_key,\n"
239  " data_value\n"
240  "FROM\n"
241  " job_string_string_data\n"
242  "WHERE\n"
243  " job_string_string_data.struct_id = ?;";
244  cppdb::statement stmt(basic::database::safely_prepare_statement(statement_string,db_session));
245  stmt.bind(1,struct_id);
246  cppdb::result res(basic::database::safely_read_from_database(stmt));
247 
248  while(res.next()){
249  std::string data_key, data_value;
250  res >> data_key >> data_value;
252  job->add_string_string_pair(data_key, data_value);
253  }
254 }
255 
256 void JobDataFeatures::insert_string_real_rows(boost::uuids::uuid struct_id, utility::sql_database::sessionOP db_session, protocols::jd2::JobCOP job) const
257 {
258 
259  InsertGenerator string_real_insert("job_string_real_data");
260  string_real_insert.add_column("struct_id");
261  string_real_insert.add_column("data_key");
262  string_real_insert.add_column("data_value");
263 
264  RowDataBaseOP struct_id_data = new RowData<boost::uuids::uuid>("struct_id",struct_id);
265 
266  protocols::jd2::Job::StringRealPairs::const_iterator it(job->output_string_real_pairs_begin());
267 
268  for(; it != job->output_string_real_pairs_end();++it)
269  {
270 
271  RowDataBaseOP key_data = new RowData<std::string>("data_key",it->first);
272  RowDataBaseOP value_data = new RowData<core::Real>("data_value",it->second);
273 
274  string_real_insert.add_row(utility::tools::make_vector(struct_id_data,key_data,value_data));
275  }
276 
277  string_real_insert.write_to_database(db_session);
278 }
279 
280 void
282  utility::sql_database::sessionOP db_session,
283  boost::uuids::uuid struct_id,
285 ){
286  if(!table_exists(db_session, "job_string_real_data")) return;
287  std::string statement_string =
288  "SELECT\n"
289  " data_key,\n"
290  " data_value\n"
291  "FROM\n"
292  " job_string_real_data\n"
293  "WHERE\n"
294  " job_string_real_data.struct_id = ?;";
295  cppdb::statement stmt(basic::database::safely_prepare_statement(statement_string,db_session));
296  stmt.bind(1,struct_id);
297  cppdb::result res(basic::database::safely_read_from_database(stmt));
298 
299  while(res.next()){
300  std::string data_key;
301  core::Real data_value;
302  res >> data_key >> data_value;
304  job->add_string_real_pair(data_key, data_value);
305  }
306 }
307 
308 
309 }
310 }