#include "database.h" #include #include #include "query.h" namespace verbly { database::database(std::string path) { if (sqlite3_open_v2(path.c_str(), &ppdb_, SQLITE_OPEN_READONLY, NULL) != SQLITE_OK) { // We still have to free the resources allocated. In the event that // allocation failed, ppdb will be null and sqlite3_close_v2 will just // ignore it. std::string errmsg(sqlite3_errmsg(ppdb_)); sqlite3_close_v2(ppdb_); throw database_error("Could not open verbly datafile", errmsg); } } database::database(database&& other) : database() { swap(*this, other); } database& database::operator=(database&& other) { swap(*this, other); return *this; } void swap(database& first, database& second) { std::swap(first.ppdb_, second.ppdb_); } database::~database() { sqlite3_close_v2(ppdb_); } query database::notions(filter where, order sortOrder, int limit) const { return query(*this, ppdb_, std::move(where), std::move(sortOrder), limit); } query database::words(filter where, order sortOrder, int limit) const { return query(*this, ppdb_, std::move(where), std::move(sortOrder), limit); } query database::frames(filter where, order sortOrder, int limit) const { return query(*this, ppdb_, std::move(where), std::move(sortOrder), limit); } query database::parts(filter where, order sortOrder, int limit) const { return query(*this, ppdb_, std::move(where), std::move(sortOrder), limit); } query
database::forms(filter where, order sortOrder, int limit) const { return query(*this, ppdb_, std::move(where), std::move(sortOrder), limit); } query database::pronunciations(filter where, order sortOrder, int limit) const { return query(*this, ppdb_, std::move(where), std::move(sortOrder), limit); } std::set database::selrestrs(int partId) const { std::string queryString = "SELECT selrestr FROM selrestrs WHERE part_id = ?"; sqlite3_stmt* ppstmt; if (sqlite3_prepare_v2(ppdb_, queryString.c_str(), queryString.length(), &ppstmt, NULL) != SQLITE_OK) { std::string errorMsg = sqlite3_errmsg(ppdb_); sqlite3_finalize(ppstmt); throw database_error("Error preparing query", errorMsg); } if (sqlite3_bind_int(ppstmt, 1, partId) != SQLITE_OK) { std::string errorMsg = sqlite3_errmsg(ppdb_); sqlite3_finalize(ppstmt); throw database_error("Error binding value to query", errorMsg); } std::set result; while (sqlite3_step(ppstmt) == SQLITE_ROW) { result.insert(reinterpret_cast(sqlite3_column_blob(ppstmt, 0))); } sqlite3_finalize(ppstmt); return result; } std::set database::synrestrs(int partId) const { std::string queryString = "SELECT synrestr FROM synrestrs WHERE part_id = ?"; sqlite3_stmt* ppstmt; if (sqlite3_prepare_v2(ppdb_, queryString.c_str(), queryString.length(), &ppstmt, NULL) != SQLITE_OK) { std::string errorMsg = sqlite3_errmsg(ppdb_); sqlite3_finalize(ppstmt); throw database_error("Error preparing query", errorMsg); } if (sqlite3_bind_int(ppstmt, 1, partId) != SQLITE_OK) { std::string errorMsg = sqlite3_errmsg(ppdb_); sqlite3_finalize(ppstmt); throw database_error("Error binding value to query", errorMsg); } std::set result; while (sqlite3_step(ppstmt) == SQLITE_ROW) { result.insert(reinterpret_cast(sqlite3_column_blob(ppstmt, 0))); } sqlite3_finalize(ppstmt); return result; } }; ltiplayer&id=d9b6fe13be557db60b2793a30b55b0d64ae13b7a'>plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
connections {
  from_room: "Control Center Entrance"
  to_room: "Main Area"
  door { name: "Control Center Entrance" }
}
connections {
  from_room: "Main Area"
  to_room: "Control Center Entrance"
  door { name: "K Entered" }
}
connections {
  from_room: "Paintings Room"
  to_room: "Main Area"
  door { name: "Paintings Door" }
}
connections {
  from_room: "Wisdom Room"
  to_room: "Main Area"
  door { name: "Wisdom Door" }
}
connections {
  from_room: "Tower Room"
  to_room: "Main Area"
  door { name: "Tower Door" }
}
connections {
  from_room: "Color Room"
  to_room: "Main Area"
  door { name: "Color Door" }
}
connections {
  from_room: "Main Area"
  to_room: "Mastery"
  door { name: "Mastery" }
}