15 #include <basic/Tracer.hh>
21 #include <basic/database/sql_utils.hh>
22 #include <basic/options/option.hh>
23 #include <basic/options/keys/inout.OptionKeys.gen.hh>
24 #include <basic/database/schema_generator/PrimaryKey.hh>
25 #include <basic/database/schema_generator/ForeignKey.hh>
26 #include <basic/database/schema_generator/Column.hh>
27 #include <basic/database/schema_generator/Schema.hh>
31 #include <utility/vector1.hh>
34 #include <boost/foreach.hpp>
35 #include <boost/assign/list_of.hpp>
36 #define foreach BOOST_FOREACH
48 using utility::sql_database::sessionOP;
49 using basic::database::write_schema_to_database;
50 using basic::database::safely_prepare_statement;
51 using basic::database::safely_read_from_database;
52 using basic::database::safely_write_to_database;
54 using cppdb::statement;
83 using namespace basic::database::schema_generator;
85 Column atom_type_set_name(
"atom_type_set_name",
new DbText(64));
86 Column name(
"name",
new DbText(32));
87 Column element(
"element",
new DbText(2));
88 Column lennard_jones_radius(
"lennard_jones_radius",
new DbReal());
89 Column lennard_jones_well_depth(
"lennard_jones_well_depth",
new DbReal());
90 Column lazaridis_karplus_lambda(
"lazaridis_karplus_lambda",
new DbReal());
91 Column lazaridis_karplus_degrees_of_freedom(
"lazaridis_karplus_degrees_of_freedom",
new DbReal());
92 Column lazaridis_karplus_volume(
"lazaridis_karplus_volume",
new DbReal());
94 Columns primary_key_columns;
95 primary_key_columns.push_back(atom_type_set_name);
96 primary_key_columns.push_back(name);
97 PrimaryKey primary_key(primary_key_columns);
99 Schema table(
"atom_types", primary_key);
100 table.add_column(element);
101 table.add_column(lennard_jones_radius);
102 table.add_column(lennard_jones_well_depth);
103 table.add_column(lazaridis_karplus_lambda);
104 table.add_column(lazaridis_karplus_degrees_of_freedom);
105 table.add_column(lazaridis_karplus_volume);
107 table.write(db_session);
114 using namespace basic::database::schema_generator;
115 using namespace basic::database;
116 using namespace boost::assign;
118 Column property(
"property",
new DbText(32));
120 Columns primary_key_columns;
121 primary_key_columns.push_back(property);
122 PrimaryKey primary_key(primary_key_columns);
124 Schema table(
"atom_type_property_values", primary_key);
126 table.write(db_session);
129 string const table_name(
"atom_type_property_values");
130 std::vector<string> column_names;
131 column_names.push_back(
"property");
132 insert_or_ignore(table_name, column_names, list_of(
"'ACCEPTOR'"), db_session);
133 insert_or_ignore(table_name, column_names, list_of(
"'ACCEPTOR'"), db_session);
134 insert_or_ignore(table_name, column_names, list_of(
"'DONOR'"), db_session);
135 insert_or_ignore(table_name, column_names, list_of(
"'POLAR_HYDROGEN'"), db_session);
136 insert_or_ignore(table_name, column_names, list_of(
"'AROMATIC'"), db_session);
137 insert_or_ignore(table_name, column_names, list_of(
"'H2O'"), db_session);
138 insert_or_ignore(table_name, column_names, list_of(
"'ORBITALS'"), db_session);
139 insert_or_ignore(table_name, column_names, list_of(
"'VIRTUAL'"), db_session);
140 insert_or_ignore(table_name, column_names, list_of(
"'SP2_HYBRID'"), db_session);
141 insert_or_ignore(table_name, column_names, list_of(
"'SP3_HYBRID'"), db_session);
142 insert_or_ignore(table_name, column_names, list_of(
"'RING_HYBRID'"), db_session);
150 using namespace basic::database::schema_generator;
152 Column atom_type_set_name(
"atom_type_set_name",
new DbText(64));
153 Column name(
"name",
new DbText(4));
154 Column property(
"property",
new DbText(32));
156 Columns primary_key_columns;
157 primary_key_columns.push_back(atom_type_set_name);
158 primary_key_columns.push_back(name);
159 primary_key_columns.push_back(property);
160 PrimaryKey primary_key(primary_key_columns);
162 Columns foreign_key_columns1;
163 foreign_key_columns1.push_back(atom_type_set_name);
164 foreign_key_columns1.push_back(name);
166 reference_columns1.push_back(
"atom_type_set_name");
167 reference_columns1.push_back(
"name");
168 ForeignKey foreign_key1(foreign_key_columns1,
"atom_types", reference_columns1,
true);
170 Columns foreign_key_columns2;
171 foreign_key_columns2.push_back(property);
173 reference_columns2.push_back(
"property");
174 ForeignKey foreign_key2(foreign_key_columns2,
"atom_type_property_values", reference_columns2,
true);
177 Schema table(
"atom_type_properties", primary_key);
178 table.add_foreign_key(foreign_key1);
179 table.add_foreign_key(foreign_key2);
181 table.write(db_session);
189 using namespace basic::database::schema_generator;
191 Column atom_type_set_name(
"atom_type_set_name",
new DbText(64));
192 Column name(
"name",
new DbText(32));
193 Column parameter(
"parameter",
new DbText(32));
194 Column value(
"value",
new DbReal());
196 Columns primary_key_columns;
197 primary_key_columns.push_back(atom_type_set_name);
198 primary_key_columns.push_back(name);
199 primary_key_columns.push_back(parameter);
200 PrimaryKey primary_key(primary_key_columns);
202 Columns foreign_key_columns;
203 foreign_key_columns.push_back(atom_type_set_name);
204 foreign_key_columns.push_back(name);
206 reference_columns.push_back(
"atom_type_set_name");
207 reference_columns.push_back(
"name");
208 ForeignKey foreign_key(foreign_key_columns,
"atom_types", reference_columns,
true);
210 Schema table(
"atom_type_extra_parameters", primary_key);
211 table.add_foreign_key(foreign_key);
212 table.add_column(value);
214 table.write(db_session);
230 string const & atom_type_set_name(atom_type_set.
name());
233 "SELECT * FROM atom_types WHERE atom_type_set_name = ?";
234 statement stmt(safely_prepare_statement(stmt_string, db_session));
235 stmt.bind(1, atom_type_set_name);
236 result res(safely_read_from_database(stmt));
237 if(res.next())
return;
240 for(
Size atom_index=1; atom_index <= atom_type_set.
n_atomtypes(); ++atom_index){
241 AtomType const & atom_type(atom_type_set[atom_index]);
243 atom_type_set_name, atom_type, db_session);
245 atom_type_set_name, atom_type, db_session);
247 atom_type_set, atom_type, db_session);
258 string stmt_string =
"SELECT name FROM atom_types;";
259 statement stmt(safely_prepare_statement(stmt_string, db_session));
260 result res(safely_read_from_database(stmt));
265 atom_names.push_back(name);
280 string const & atom_type_set_name,
285 string stmt_string =
"INSERT INTO atom_types (atom_type_set_name, name, element, lennard_jones_radius, lennard_jones_well_depth, lazaridis_karplus_lambda, lazaridis_karplus_degrees_of_freedom, lazaridis_karplus_volume) VALUES (?,?,?,?,?,?,?,?);";
286 statement stmt(safely_prepare_statement(stmt_string, db_session));
288 stmt.bind(1,atom_type_set_name);
289 stmt.bind(2,atom_type.
name());
290 stmt.bind(3,atom_type.
element());
296 safely_write_to_database(stmt);
303 string const & atom_type_set_name,
308 string statement_string =
"INSERT INTO atom_type_properties (atom_type_set_name, name, property) VALUES (?,?,?);";
309 statement stmt(safely_prepare_statement(statement_string, db_session));
313 property_iter = properties.begin(), property_end = properties.end();
314 property_iter != property_end; ++property_iter){
315 stmt.bind(1, atom_type_set_name);
316 stmt.bind(2, atom_type.
name());
317 stmt.bind(3, *property_iter);
318 safely_write_to_database(stmt);
330 string const atom_type_set_name = atom_type_set.
name();
332 string stmt_string =
"INSERT INTO atom_type_extra_parameters (atom_type_set_name, name, parameter, value) VALUES (?,?,?,?);";
333 statement stmt(safely_prepare_statement(stmt_string, db_session));
335 for(std::map<std::string, int>::const_iterator
336 extra_parameter_index_iter =
338 extra_parameter_index_iter_end =
340 extra_parameter_index_iter != extra_parameter_index_iter_end;
341 ++extra_parameter_index_iter){
343 string const extra_parameter_name(extra_parameter_index_iter->first);
344 Size const extra_parameter_index(extra_parameter_index_iter->second);
345 stmt.bind(1, atom_type_set_name);
346 stmt.bind(2, atom_type.
name());
347 stmt.bind(3, extra_parameter_name);
349 safely_write_to_database(stmt);