18 #include <basic/options/keys/parser.OptionKeys.gen.hh>
19 #include <basic/options/option.hh>
20 #include <basic/options/keys/inout.OptionKeys.gen.hh>
21 #include <basic/options/keys/out.OptionKeys.gen.hh>
22 #include <basic/database/sql_utils.hh>
25 #include <basic/database/schema_generator/PrimaryKey.hh>
26 #include <basic/database/schema_generator/ForeignKey.hh>
27 #include <basic/database/schema_generator/Column.hh>
28 #include <basic/database/schema_generator/Schema.hh>
31 #include <utility/io/izstream.hh>
32 #include <utility/sql_database/DatabaseSessionManager.hh>
33 #include <utility/vector1.hh>
36 #include <basic/Tracer.hh>
39 #include <cppdb/frontend.h>
45 static basic::Tracer
TR(
"protocols.features.ProtocolFeatures");
51 using std::stringstream;
52 using basic::options::OptionKeys::parser::protocol;
53 using basic::options::option;
58 using utility::io::izstream;
60 using utility::sql_database::sessionOP;
61 using cppdb::statement;
77 using namespace basic::database::schema_generator;
79 std::string db_mode(basic::options::option[basic::options::OptionKeys::inout::dbms::mode]);
80 bool protocol_id_mode = basic::options::option[basic::options::OptionKeys::out::database_protocol_id].user();
84 Column protocol_id(
"protocol_id",
new DbInteger());
85 Schema protocols(
"protocols", PrimaryKey(protocol_id));
87 protocols.add_column( Column(
"specified_options",
new DbText()) );
88 protocols.add_column( Column(
"command_line",
new DbText()) );
89 protocols.add_column( Column(
"svn_url",
new DbText()) );
90 protocols.add_column( Column(
"svn_version",
new DbText()) );
91 protocols.add_column( Column(
"script",
new DbText()) );
92 protocols.write(db_session);
97 Column protocol_id(
"protocol_id",
new DbInteger(),
false ,
true );
98 Schema protocols(
"protocols", PrimaryKey(protocol_id));
100 protocols.add_column( Column(
"specified_options",
new DbText()) );
101 protocols.add_column( Column(
"command_line",
new DbText()) );
102 protocols.add_column( Column(
"svn_url",
new DbText()) );
103 protocols.add_column( Column(
"svn_version",
new DbText()) );
104 protocols.add_column( Column(
"script",
new DbText()) );
105 protocols.write(db_session);
128 string const command_line( option.get_argv() );
130 stringstream option_stream;
131 option_stream << basic::options::option;
132 string const specified_options( option_stream.str() );
137 bool using_rosetta_scripts( basic::options::option[ protocol ].active() );
139 if ( using_rosetta_scripts){
140 string const script_fname( basic::options::option[ protocol ] );
141 stringstream script_buf;
142 script_buf << utility::io::izstream( script_fname.c_str() ).rdbuf();
143 script = script_buf.str();
153 " protocols.protocol_id = ?;";
154 cppdb::statement stmt(basic::database::safely_prepare_statement(statement_string,db_session));
155 stmt.bind(1,protocol_id);
157 TR <<
"Checking for existing protocol entry with given id" << std::endl;
158 cppdb::result res(basic::database::safely_read_from_database(stmt));
167 cppdb::statement insert_statement;
169 TR <<
"Writing to protocols table with given protocol id: " << protocol_id << std::endl;
170 std::string insert_string(
"INSERT INTO protocols (protocol_id, specified_options, command_line, svn_url, svn_version, script) VALUES (?,?,?,?,?,?);");
171 insert_statement = basic::database::safely_prepare_statement(insert_string,db_session);
172 insert_statement.bind(1,protocol_id);
173 insert_statement.bind(2,command_line);
174 insert_statement.bind(3,specified_options);
175 insert_statement.bind(4,svn_url);
176 insert_statement.bind(5,svn_version);
177 insert_statement.bind(6,script);
180 TR <<
"No protocol ID, generating one automagically" << std::endl;
181 std::string insert_string(
"INSERT INTO protocols (command_line, specified_options, svn_url, svn_version, script) VALUES (?,?,?,?,?);");
182 insert_statement = basic::database::safely_prepare_statement(insert_string,db_session);
183 insert_statement.bind(1,command_line);
184 insert_statement.bind(2,specified_options);
185 insert_statement.bind(3,svn_url);
186 insert_statement.bind(4,svn_version);
187 insert_statement.bind(5,script);
190 basic::database::safely_write_to_database(insert_statement);
194 core::Size protocol_id = insert_statement.sequence_last(
"protocols_protocol_id_seq");