void PaymentOperationStateHandler::saveRecord( const TransactionUUID &transactionUUID, BytesShared state, size_t stateBytesCount) { string query = "INSERT OR REPLACE INTO " + mTableName + " (transaction_uuid, state, state_bytes_count, recording_time) VALUES(?, ?, ?, ?);"; sqlite3_stmt *stmt; int rc = sqlite3_prepare_v2(mDataBase, query.c_str(), -1, &stmt, 0); if (rc != SQLITE_OK) { throw IOError("PaymentOperationStateHandler::insert: " "Bad query; sqlite error: " + to_string(rc)); } rc = sqlite3_bind_blob(stmt, 1, transactionUUID.data, NodeUUID::kBytesSize, SQLITE_STATIC); if (rc != SQLITE_OK) { throw IOError("PaymentOperationStateHandler::insert: " "Bad binding of TransactionUUID; sqlite error: " + to_string(rc)); } rc = sqlite3_bind_blob(stmt, 2, state.get(), (int)stateBytesCount, SQLITE_STATIC); if (rc != SQLITE_OK) { throw IOError("PaymentOperationStateHandler::insert: " "Bad binding of State; sqlite error: " + to_string(rc)); } rc = sqlite3_bind_int(stmt, 3, (int)stateBytesCount); if (rc != SQLITE_OK) { throw IOError("PaymentOperationStateHandler::insert: " "Bad binding of State bytes count; sqlite error: " + to_string(rc)); } GEOEpochTimestamp timestamp = microsecondsSinceGEOEpoch(utc_now()); rc = sqlite3_bind_int64(stmt, 4, timestamp); if (rc != SQLITE_OK) { throw IOError("PaymentOperationStateHandler::insert: " "Bad binding of Timestamp; sqlite error: " + to_string(rc)); } rc = sqlite3_step(stmt); sqlite3_reset(stmt); sqlite3_finalize(stmt); if (rc == SQLITE_DONE) { #ifdef STORAGE_HANDLER_DEBUG_LOG info() << "prepare inserting is completed successfully"; #endif } else { warning() << "PaymentOperationStateHandler::insert: Run query; sqlite error: " << rc; throw IOError("PaymentOperationStateHandler::insert: " "Run query; sqlite error: " + to_string(rc)); } }
void logout() { this->logout_time = utc_now(); }
void login() { GS_ASSERT(this->client_id >= 0); this->login_time = utc_now(); printf("Session began at %ld\n", this->login_time); }