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>
35 #include <boost/uuid/uuid.hpp>
36 #include <boost/uuid/uuid_io.hpp>
39 #include <cppdb/frontend.h>
44 #include <utility/vector1.hh>
45 #include <utility/tools/make_vector.hh>
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;
64 return "JobDataFeatures";
70 using namespace basic::database::schema_generator;
71 Column struct_id(
"struct_id",
new DbUUID(),
false ,
false );
72 Column data_key(
"data_key",
new DbText(255));
75 primary_columns.push_back(struct_id);
76 primary_columns.push_back(data_key);
77 PrimaryKey primary_key(primary_columns);
79 Schema job_string_data(
"job_string_data",primary_key);
80 job_string_data.add_foreign_key(ForeignKey(struct_id,
"structures",
"struct_id",
true ));
82 job_string_data.write(db_session);
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 ));
86 job_string_string_data.add_column(Column(
"data_value",
new DbText()));
88 job_string_string_data.write(db_session);
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 ));
92 job_string_real_data.add_column(Column(
"data_value",
new DbReal()));
94 job_string_real_data.write(db_session);
101 dependencies.push_back(
"StructureFeatures");
110 boost::uuids::uuid struct_id,
111 utility::sql_database::sessionOP db_session
123 utility::sql_database::sessionOP db_session,
124 boost::uuids::uuid struct_id,
133 boost::uuids::uuid struct_id,
134 utility::sql_database::sessionOP db_session
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);
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);
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);
158 InsertGenerator string_insert(
"job_string_data");
159 string_insert.add_column(
"struct_id");
160 string_insert.add_column(
"data_key");
162 protocols::jd2::Job::Strings::const_iterator it(job->output_strings_begin());
164 RowDataBaseOP struct_id_data =
new RowData<boost::uuids::uuid>(
"struct_id",struct_id);
165 for(; it != job->output_strings_end(); ++it)
168 RowDataBaseOP string_data =
new RowData<std::string>(
"data_key",*it);
170 string_insert.add_row(utility::tools::make_vector(struct_id_data,string_data));
173 string_insert.write_to_database(db_session);
179 utility::sql_database::sessionOP db_session,
180 boost::uuids::uuid struct_id,
183 if(!table_exists(db_session,
"job_string_data"))
return;
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));
200 job->add_string(data_key);
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");
212 protocols::jd2::Job::StringStringPairs::const_iterator it(job->output_string_string_pairs_begin());
214 RowDataBaseOP struct_id_data =
new RowData<boost::uuids::uuid>(
"struct_id",struct_id);
216 for(; it != job->output_string_string_pairs_end();++it)
219 RowDataBaseOP key_data =
new RowData<std::string>(
"data_key",it->first);
220 RowDataBaseOP value_data =
new RowData<std::string>(
"data_value",it->second);
222 string_string_insert.add_row(utility::tools::make_vector(struct_id_data,key_data,value_data));
225 string_string_insert.write_to_database(db_session);
231 utility::sql_database::sessionOP db_session,
232 boost::uuids::uuid struct_id,
235 if(!table_exists(db_session,
"job_string_string_data"))
return;
241 " job_string_string_data\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));
250 res >> data_key >> data_value;
252 job->add_string_string_pair(data_key, data_value);
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");
264 RowDataBaseOP struct_id_data =
new RowData<boost::uuids::uuid>(
"struct_id",struct_id);
266 protocols::jd2::Job::StringRealPairs::const_iterator it(job->output_string_real_pairs_begin());
268 for(; it != job->output_string_real_pairs_end();++it)
271 RowDataBaseOP key_data =
new RowData<std::string>(
"data_key",it->first);
272 RowDataBaseOP value_data =
new RowData<core::Real>(
"data_value",it->second);
274 string_real_insert.add_row(utility::tools::make_vector(struct_id_data,key_data,value_data));
277 string_real_insert.write_to_database(db_session);
282 utility::sql_database::sessionOP db_session,
283 boost::uuids::uuid struct_id,
286 if(!table_exists(db_session,
"job_string_real_data"))
return;
292 " job_string_real_data\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));
302 res >> data_key >> data_value;
304 job->add_string_real_pair(data_key, data_value);