1 #ifndef STATISTICS_DB_CC
2 #define STATISTICS_DB_CC
13 this->
pathToDBFile =
"file:" + this->conf->getStatisticsDB() +
"/dbFile";
42 SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_URI, NULL) == SQLITE_OK) {
45 PDB_COUT <<
"self learning database open successfully" << std::endl;
48 PDB_COUT <<
"failure in opening self learning database" << std::endl;
70 bool ret =
execDB (
"CREATE TABLE IF NOT EXISTS DATA (ID BIGINT PRIMARY KEY, "
71 "DATABASE_NAME VARCHAR(128), SET_NAME VARCHAR(128),"
72 "CREATED_JOBID VARCHAR(128), IS_REMOVED BOOLEAN,"
73 "SET_TYPE VARCHAR(32), CLASS_NAME VARCHAR(128),"
74 "TYPE_ID INT, SIZE BIGINT, PAGE_SIZE BIGINT,"
75 "MODIFICATION_TIME BIGINT) WITHOUT ROWID;");
79 ret =
execDB (
"CREATE TABLE IF NOT EXISTS DATA_TRANSFORMATION (ID BIGINT PRIMARY KEY, "
80 "INPUT_DATA_ID BIGINT, OUTPUT_DATA_ID BIGINT, "
81 "NUM_PARTITIONS INT, NUM_NODES INT, "
82 "TRANSFORMATION_TYPE VARCHAR(32), TCAP TEXT, "
84 "FOREIGN KEY (INPUT_DATA_ID) REFERENCES DATA(ID),"
85 "FOREIGN KEY (OUTPUT_DATA_ID) REFERENCES DATA(ID)) WITHOUT ROWID;");
95 PDB_COUT <<
"command: " << cmdString << std::endl;
96 sqlite3_stmt * cmdStatement;
99 sqlite3_step(cmdStatement);
100 sqlite3_finalize(cmdStatement);
105 sqlite3_finalize(cmdStatement);
113 if (mkdir(this->
conf->getStatisticsDB().c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH)!= -1){
123 std::string created_jobId,
125 std::string className,
130 PDB_COUT <<
"to create data..." << std::endl;
133 string cmdString =
"INSERT INTO DATA "
134 " (ID, DATABASE_NAME, SET_NAME, CREATED_JOBID, IS_REMOVED, SET_TYPE, "
135 "CLASS_NAME, TYPE_ID, SIZE, PAGE_SIZE, MODIFICATION_TIME) "
136 "VALUES(" + std::to_string(
id) +
","
143 + std::to_string(typeId) +
","
145 + std::to_string(pageSize) +
","
146 +
"strftime('%s', 'now', 'localtime'));";
147 PDB_COUT <<
"CreateData: " << cmdString << std::endl;
156 std::string cmdString =
"UPDATE DATA set SIZE = " + std::to_string(size) +
157 ", MODIFICATION_TIME = strftime('%s', 'now', 'localtime') where ID = " +
159 PDB_COUT <<
"UpdateDataForSize: " << cmdString << std::endl;
166 std::string cmdString = std::string(
"UPDATE DATA set IS_REMOVED = 1") +
167 std::string(
", MODIFICATION_TIME = strftime('%s', 'now', 'localtime') where ID = ") +
169 PDB_COUT <<
"UpdateDataForRemoval: " << cmdString << std::endl;
178 std::string transformationType,
183 PDB_COUT <<
"to create data transformation..." << std::endl;
185 sqlite3_stmt * statement;
188 string cmdString =
"INSERT INTO DATA_TRANSFORMATION "
189 " (ID, INPUT_DATA_ID, OUTPUT_DATA_ID, NUM_PARTITIONS, NUM_NODES, TRANSFORMATION_TYPE, TCAP, COMPUTATIONS) "
190 "VALUES(" + std::to_string(
id) +
","
191 + std::to_string(input_data_id) +
","
192 + std::to_string(output_data_id) +
","
193 + std::to_string(num_partitions) +
","
194 + std::to_string(num_nodes) +
","
195 +
quoteStr(transformationType) +
","
198 PDB_COUT <<
"CreateDataTransformation: " << cmdString << std::endl;
200 deepCopyToCurrentAllocationBlock<Vector<Handle<Computation>>>(computations);
201 if (sqlite3_prepare_v2(
statisticsDBHandler, cmdString.c_str(), -1, &statement, NULL) == SQLITE_OK) {
204 getRecord<Vector<Handle<Computation>>>(myComputations);
205 sqlite3_bind_blob(statement, 1, record, record->
numBytes(), SQLITE_STATIC);
206 sqlite3_step(statement);
207 sqlite3_finalize(statement);
212 sqlite3_finalize(statement);
218 std::vector<std::shared_ptr<TransformedSet>>
221 std::vector<std::shared_ptr<TransformedSet>> ret;
231 sqlite3_stmt * statement;
232 std::string queryString =
"SELECT MAX(ID) from " +
quoteStr(tableName);
233 if (sqlite3_prepare_v2(
statisticsDBHandler, queryString.c_str(), -1, &statement, NULL) == SQLITE_OK) {
234 int res = sqlite3_step(statement);
235 if (res == SQLITE_ROW) {
236 id = sqlite3_column_int(statement, 0);
244 sqlite3_finalize(statement);
252 sqlite3_stmt * statement;
253 std::string queryString =
"SELECT MAX(ID) from DATA where DATABASE_NAME=" +
quoteStr(databaseAndSetName.first)
254 +
" AND SET_NAME=" +
quoteStr(databaseAndSetName.second);
255 PDB_COUT <<
"Get Latest Data Id: " << queryString << std::endl;
256 if (sqlite3_prepare_v2(
statisticsDBHandler, queryString.c_str(), -1, &statement, NULL) == SQLITE_OK) {
257 int res = sqlite3_step(statement);
258 if (res == SQLITE_ROW) {
259 id = sqlite3_column_int(statement, 0);
267 sqlite3_finalize(statement);
279 return std::string(
"'") + s + std::string(
"'");
284 const std::string& oldStr,
285 const std::string& newStr)
287 std::string::size_type pos = 0u;
288 while((pos = str.find(oldStr, pos)) != std::string::npos){
289 str.replace(pos, oldStr.length(), newStr);
290 pos += newStr.length();
bool createDataTransformation(long input_data_id, long output_data_id, int num_partitions, int num_nodes, std::string transformationType, std::string tcap, Handle< Vector< Handle< Computation >>> computations, long &id)
long getLatestId(std::string tableName)
long getLatestTransformationId()
StatisticsDB(ConfigurationPtr conf)
bool updateDataForSize(long id, size_t size)
shared_ptr< Configuration > ConfigurationPtr
std::vector< std::shared_ptr< TransformedSet > > getTransformedSets(std::pair< std::string, std::string > databaseAndSetName)
sqlite3 * statisticsDBHandler
bool createData(std::string databaseName, std::string setName, std::string created_jobId, std::string setType, std::string className, int typeId, size_t pageSize, long &id)
long getLatestDataId(std::pair< std::string, std::string > databaseAndSetName)
std::string quoteStr(std::string &s)
bool updateDataForRemoval(long id)
void replaceStr(std::string &str, const std::string &oldStr, const std::string &newStr)
bool execDB(std::string cmdString)