fix ca storage cannot repeat REVOKE and optimize ca-memory with index
Change-Id: I3c254e1cd93d5ff562c501c0296ef7bd84634cb2
diff --git a/src/ca-storage-detail/ca-sqlite.cpp b/src/ca-storage-detail/ca-sqlite.cpp
index a3ff327..a658c43 100644
--- a/src/ca-storage-detail/ca-sqlite.cpp
+++ b/src/ca-storage-detail/ca-sqlite.cpp
@@ -55,7 +55,7 @@
);
CREATE UNIQUE INDEX IF NOT EXISTS
CaStateIdIndex ON CaStates(request_id);
-CREATE UNIQUE INDEX IF NOT EXISTS
+CREATE INDEX IF NOT EXISTS
CaStateKeyNameIndex ON CaStates(cert_key_name);
CREATE TABLE IF NOT EXISTS
@@ -158,19 +158,21 @@
// check whether request is there already
auto keyNameTlv = request.m_cert.getKeyName().wireEncode();
- Sqlite3Statement statement1(m_database,
- R"_SQLTEXT_(SELECT 1 FROM CaStates where cert_key_name = ?)_SQLTEXT_");
- statement1.bind(1, keyNameTlv, SQLITE_TRANSIENT);
- if (statement1.step() == SQLITE_ROW) {
- BOOST_THROW_EXCEPTION(Error("Request for " + request.m_cert.getKeyName().toUri() + " already exists"));
- }
+ if (request.m_requestType == RequestType::NEW) {
+ Sqlite3Statement statement1(m_database,
+ R"_SQLTEXT_(SELECT 1 FROM CaStates where cert_key_name = ?)_SQLTEXT_");
+ statement1.bind(1, keyNameTlv, SQLITE_TRANSIENT);
+ if (statement1.step() == SQLITE_ROW) {
+ BOOST_THROW_EXCEPTION(Error("Request for " + request.m_cert.getKeyName().toUri() + " already exists"));
+ }
- // check whether certificate is already issued
- Sqlite3Statement statement2(m_database,
- R"_SQLTEXT_(SELECT 1 FROM IssuedCerts where cert_key_name = ?)_SQLTEXT_");
- statement2.bind(1, keyNameTlv, SQLITE_TRANSIENT);
- if (statement2.step() == SQLITE_ROW) {
- BOOST_THROW_EXCEPTION(Error("Cert for " + request.m_cert.getKeyName().toUri() + " already exists"));
+ // check whether certificate is already issued
+ Sqlite3Statement statement2(m_database,
+ R"_SQLTEXT_(SELECT 1 FROM IssuedCerts where cert_key_name = ?)_SQLTEXT_");
+ statement2.bind(1, keyNameTlv, SQLITE_TRANSIENT);
+ if (statement2.step() == SQLITE_ROW) {
+ BOOST_THROW_EXCEPTION(Error("Cert for " + request.m_cert.getKeyName().toUri() + " already exists"));
+ }
}
Sqlite3Statement statement(