Skip to content

Commit 8543cc7

Browse files
committed
Bug 1979760 - Opens count methods on addresses, credit cards, and logins
This patch: * Adds count_all_addresses * Adds count_all_credit_cards * Opens count on DatabaseLoginsStorage.kt
1 parent 4a04cc2 commit 8543cc7

File tree

6 files changed

+60
-0
lines changed

6 files changed

+60
-0
lines changed

components/autofill/src/autofill.udl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ interface Store {
103103
[Throws=AutofillApiError]
104104
sequence<CreditCard> get_all_credit_cards();
105105

106+
[Throws=AutofillApiError]
107+
i64 count_all_credit_cards();
108+
106109
[Throws=AutofillApiError]
107110
void update_credit_card(string guid, UpdatableCreditCardFields cc);
108111

@@ -121,6 +124,9 @@ interface Store {
121124
[Throws=AutofillApiError]
122125
sequence<Address> get_all_addresses();
123126

127+
[Throws=AutofillApiError]
128+
i64 count_all_addresses();
129+
124130
[Throws=AutofillApiError]
125131
void update_address(string guid, UpdatableAddressFields a);
126132

components/autofill/src/db/addresses.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,15 @@ pub(crate) fn get_all_addresses(conn: &Connection) -> Result<Vec<InternalAddress
115115
Ok(addresses)
116116
}
117117

118+
pub(crate) fn count_all_addresses(conn: &Connection) -> Result<i64> {
119+
let sql = "SELECT COUNT(*)
120+
FROM addresses_data";
121+
122+
let mut stmt = conn.prepare(sql)?;
123+
let count: i64 = stmt.query_row([], |row| row.get(0))?;
124+
Ok(count)
125+
}
126+
118127
/// Updates just the "updatable" columns - suitable for exposure as a public
119128
/// API.
120129
pub(crate) fn update_address(
@@ -404,6 +413,9 @@ mod tests {
404413
let expected_number_of_addresses = 2;
405414
assert_eq!(expected_number_of_addresses, retrieved_addresses.len());
406415

416+
let address_count = count_all_addresses(&db).expect("Should count all saved addresses");
417+
assert_eq!(expected_number_of_addresses, address_count as usize);
418+
407419
let retrieved_address_guids = [
408420
retrieved_addresses[0].guid.as_str(),
409421
retrieved_addresses[1].guid.as_str(),

components/autofill/src/db/credit_cards.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,15 @@ pub(crate) fn get_all_credit_cards(conn: &Connection) -> Result<Vec<InternalCred
119119
Ok(credit_cards)
120120
}
121121

122+
pub(crate) fn count_all_credit_cards(conn: &Connection) -> Result<i64> {
123+
let sql = "SELECT COUNT(*)
124+
FROM credit_cards_data";
125+
126+
let mut stmt = conn.prepare(sql)?;
127+
let count: i64 = stmt.query_row([], |row| row.get(0))?;
128+
Ok(count)
129+
}
130+
122131
pub fn update_credit_card(
123132
conn: &Connection,
124133
guid: &Guid,
@@ -466,6 +475,9 @@ pub(crate) mod tests {
466475
retrieved_credit_cards.len()
467476
);
468477

478+
let credit_card_count = count_all_credit_cards(&db)?;
479+
assert_eq!(expected_number_of_credit_cards, credit_card_count as usize);
480+
469481
let retrieved_credit_card_guids = [
470482
retrieved_credit_cards[0].guid.as_str(),
471483
retrieved_credit_cards[1].guid.as_str(),

components/autofill/src/db/store.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,12 @@ impl Store {
9494
Ok(credit_cards)
9595
}
9696

97+
#[handle_error(Error)]
98+
pub fn count_all_credit_cards(&self) -> ApiResult<i64> {
99+
let count = credit_cards::count_all_credit_cards(&self.db.lock().unwrap().writer)?;
100+
Ok(count)
101+
}
102+
97103
#[handle_error(Error)]
98104
pub fn update_credit_card(
99105
&self,
@@ -136,6 +142,12 @@ impl Store {
136142
Ok(addresses)
137143
}
138144

145+
#[handle_error(Error)]
146+
pub fn count_all_addresses(&self) -> ApiResult<i64> {
147+
let count = addresses::count_all_addresses(&self.db.lock().unwrap().writer)?;
148+
Ok(count)
149+
}
150+
139151
#[handle_error(Error)]
140152
pub fn update_address(&self, guid: String, address: UpdatableAddressFields) -> ApiResult<()> {
141153
addresses::update_address(&self.db.lock().unwrap().writer, &Guid::new(&guid), &address)

components/logins/android/src/main/java/mozilla/appservices/logins/DatabaseLoginsStorage.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,16 @@ class DatabaseLoginsStorage(dbPath: String, keyManager: KeyManager) : AutoClosea
6565
return store.list()
6666
}
6767

68+
/**
69+
* Counts the amount of logins.
70+
*
71+
* @return The number of logins.
72+
*/
73+
@Throws(LoginsApiException::class)
74+
fun count(): Long {
75+
return store.count()
76+
}
77+
6878
@Throws(LoginsApiException::class)
6979
fun hasLoginsByBaseDomain(baseDomain: String): Boolean {
7080
return store.hasLoginsByBaseDomain(baseDomain)

components/logins/android/src/test/java/mozilla/appservices/logins/DatabaseLoginsStorageTest.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,14 @@ class DatabaseLoginsStorageTest {
109109
finishAndClose(store)
110110
}
111111

112+
@Test
113+
fun testCount() {
114+
val store = getTestStore()
115+
val count = store.count()
116+
assertEquals(2, count)
117+
finishAndClose(store)
118+
}
119+
112120
@Test
113121
fun testWipeLocal() {
114122
val test = getTestStore()

0 commit comments

Comments
 (0)