18 #include <basic/database/sql_utils.hh>
22 #include <utility/exit.hh>
23 #include <utility/sql_database/DatabaseSessionManager.hh>
24 #include <utility/vector1.hh>
25 #include <utility/tools/make_vector.hh>
26 #include <basic/options/option.hh>
27 #include <basic/options/keys/inout.OptionKeys.gen.hh>
30 #include <numeric/random/random.hh>
32 #include <basic/database/schema_generator/PrimaryKey.hh>
33 #include <basic/database/schema_generator/ForeignKey.hh>
34 #include <basic/database/schema_generator/Column.hh>
35 #include <basic/database/schema_generator/Schema.hh>
37 #include <basic/database/insert_statement_generator/InsertGenerator.hh>
38 #include <basic/database/insert_statement_generator/RowData.hh>
41 #include <cppdb/frontend.h>
44 #include <boost/uuid/uuid.hpp>
45 #include <boost/uuid/uuid_generators.hpp>
46 #include <boost/uuid/uuid_io.hpp>
47 #include <boost/lexical_cast.hpp>
55 #include <basic/Tracer.hh>
56 #include <basic/options/option.hh>
57 #include <basic/options/keys/inout.OptionKeys.gen.hh>
59 static basic::Tracer
TR(
"protocols.features.StructureFeatures");
65 using std::stringstream;
67 using basic::database::safely_prepare_statement;
75 using utility::sql_database::sessionOP;
76 using cppdb::statement;
78 using basic::database::insert_statement_generator::InsertGenerator;
79 using basic::database::insert_statement_generator::RowData;
80 using basic::database::insert_statement_generator::RowDataBaseOP;
97 using namespace basic::database::schema_generator;
100 Column struct_id(
"struct_id",
new DbUUID(),
false ,
false );
101 Column batch_id(
"batch_id",
new DbInteger());
102 Column tag(
"tag",
new DbText(255));
103 Column input_tag(
"input_tag",
new DbText());
106 Schema structures(
"structures", PrimaryKey(struct_id));
108 structures.add_foreign_key(ForeignKey(batch_id,
"batches",
"batch_id",
true ));
109 structures.add_column( tag );
110 structures.add_column( input_tag );
112 structures.write(db_session);
115 Schema sampled_structures(
"sampled_structures");
116 sampled_structures.add_foreign_key(ForeignKey(batch_id,
"batches",
"batch_id",
true ));
118 sampled_structures.add_column( tag );
119 sampled_structures.add_column( input_tag );
122 unique_cols.push_back(tag);
123 unique_cols.push_back(batch_id);
124 sampled_structures.add_constraint(
new UniqueConstraint(unique_cols));
126 sampled_structures.write(db_session);
132 dependencies.push_back(
"ProtocolFeatures");
146 boost::uuids::uuid struct_id(
148 db_session, output_tag, input_tag));
157 sessionOP db_session,
159 string const & input_tag
162 boost::uuids::basic_random_generator<numeric::random::RandomGenerator>
164 boost::uuids::uuid struct_id = uuids_rng();
166 InsertGenerator structures_insert(
"structures");
167 structures_insert.add_column(
"struct_id");
168 structures_insert.add_column(
"batch_id");
169 structures_insert.add_column(
"tag");
170 structures_insert.add_column(
"input_tag");
172 RowDataBaseOP struct_id_data =
new RowData<boost::uuids::uuid>(
"struct_id",struct_id);
173 RowDataBaseOP batch_id_data =
new RowData<Size>(
"batch_id",batch_id);
174 RowDataBaseOP tag_data =
new RowData<string>(
"tag",tag);
175 RowDataBaseOP input_tag_data =
new RowData<string>(
"input_tag",input_tag);
177 structures_insert.add_row(utility::tools::make_vector(struct_id_data,batch_id_data,tag_data,input_tag_data));
178 structures_insert.write_to_database(db_session);
187 utility::sql_database::sessionOP db_session
190 InsertGenerator sampled_insert(
"sampled_structures");
191 sampled_insert.add_column(
"batch_id");
192 sampled_insert.add_column(
"tag");
193 sampled_insert.add_column(
"input_tag");
195 RowDataBaseOP batch_id_data =
new RowData<Size>(
"batch_id",batch_id);
196 RowDataBaseOP tag_data =
new RowData<string>(
"tag",tag);
197 RowDataBaseOP input_tag_data =
new RowData<string>(
"input_tag",input_tag);
199 sampled_insert.add_row(utility::tools::make_vector(batch_id_data,tag_data,input_tag_data));
200 sampled_insert.write_to_database(db_session);
204 boost::uuids::uuid struct_id,
205 utility::sql_database::sessionOP db_session
208 std::string statement_string =
"DELETE FROM structures WHERE struct_id = ?;";
209 statement stmt(basic::database::safely_prepare_statement(statement_string,db_session));
210 stmt.bind(1,struct_id);
211 basic::database::safely_write_to_database(stmt);
217 sessionOP db_session,
218 boost::uuids::uuid struct_id,
221 load_tag(db_session, struct_id, pose);
226 sessionOP db_session,
227 boost::uuids::uuid struct_id,
236 " structures.struct_id=?";
238 statement stmt(basic::database::safely_prepare_statement(statement_string, db_session)) ;
239 stmt.bind(1,struct_id);
242 result res(basic::database::safely_read_from_database(stmt));
245 error_message <<
"Unable to locate structure with struct_id '"
246 << struct_id <<
"'." << endl;
247 utility_exit_with_message(error_message.str());
256 sessionOP db_session,
263 " structures.struct_id\n"
267 " protocols.protocol_id = batches.protocol_id\n"
268 "JOIN structures ON\n"
269 " batches.batch_id = structures.batch_id\n"
271 " structures.tag=? AND protocols.protocol_id=?;";
273 statement stmt(basic::database::safely_prepare_statement(statement_string,db_session));
275 stmt.bind(2,protocol_id);
277 result res(basic::database::safely_read_from_database(stmt));
280 error_message <<
"Unable to locate structure with tag '"<<tag<<
"'."<<endl;
281 utility_exit_with_message(error_message.str());
283 boost::uuids::uuid struct_id;