Use Topics ID as a number instead of String in table schema
Bug: 232083052
Test: AdServicesServiceCoreUnitTests --iterations 2
Change-Id: I46f6102a9ab3cb71c83a70fa71153d8854a8c33c
diff --git a/adservices/service-core/java/com/android/adservices/data/topics/TopicsDao.java b/adservices/service-core/java/com/android/adservices/data/topics/TopicsDao.java
index cde6d3b..43f4461 100644
--- a/adservices/service-core/java/com/android/adservices/data/topics/TopicsDao.java
+++ b/adservices/service-core/java/com/android/adservices/data/topics/TopicsDao.java
@@ -153,10 +153,11 @@
TopicsTables.AppClassificationTopicsContract.TAXONOMY_VERSION));
long modelVersion = cursor.getLong(cursor.getColumnIndexOrThrow(
TopicsTables.AppClassificationTopicsContract.MODEL_VERSION));
- String topicString = cursor.getString(cursor.getColumnIndexOrThrow(
- TopicsTables.AppClassificationTopicsContract.TOPIC));
- Topic topic = Topic.create(
- Integer.parseInt(topicString), taxonomyVersion, modelVersion);
+ int topicId =
+ cursor.getInt(
+ cursor.getColumnIndexOrThrow(
+ TopicsTables.AppClassificationTopicsContract.TOPIC));
+ Topic topic = Topic.create(topicId, taxonomyVersion, modelVersion);
List<Topic> list = appTopicsMap.getOrDefault(app, new ArrayList<>());
list.add(topic);
@@ -241,36 +242,30 @@
null // The sort order
)) {
if (cursor.moveToNext()) {
- Integer topic1 =
- Integer.parseInt(
- cursor.getString(
- cursor.getColumnIndexOrThrow(
- TopicsTables.TopTopicsContract.TOPIC1)));
- Integer topic2 =
- Integer.parseInt(
- cursor.getString(
- cursor.getColumnIndexOrThrow(
- TopicsTables.TopTopicsContract.TOPIC2)));
- Integer topic3 =
- Integer.parseInt(
- cursor.getString(
- cursor.getColumnIndexOrThrow(
- TopicsTables.TopTopicsContract.TOPIC3)));
- Integer topic4 =
- Integer.parseInt(
- cursor.getString(
- cursor.getColumnIndexOrThrow(
- TopicsTables.TopTopicsContract.TOPIC4)));
- Integer topic5 =
- Integer.parseInt(
- cursor.getString(
- cursor.getColumnIndexOrThrow(
- TopicsTables.TopTopicsContract.TOPIC5)));
- Integer randomTopic =
- Integer.parseInt(
- cursor.getString(
- cursor.getColumnIndexOrThrow(
- TopicsTables.TopTopicsContract.RANDOM_TOPIC)));
+ int topic1 =
+ cursor.getInt(
+ cursor.getColumnIndexOrThrow(
+ TopicsTables.TopTopicsContract.TOPIC1));
+ int topic2 =
+ cursor.getInt(
+ cursor.getColumnIndexOrThrow(
+ TopicsTables.TopTopicsContract.TOPIC2));
+ int topic3 =
+ cursor.getInt(
+ cursor.getColumnIndexOrThrow(
+ TopicsTables.TopTopicsContract.TOPIC3));
+ int topic4 =
+ cursor.getInt(
+ cursor.getColumnIndexOrThrow(
+ TopicsTables.TopTopicsContract.TOPIC4));
+ int topic5 =
+ cursor.getInt(
+ cursor.getColumnIndexOrThrow(
+ TopicsTables.TopTopicsContract.TOPIC5));
+ int randomTopic =
+ cursor.getInt(
+ cursor.getColumnIndexOrThrow(
+ TopicsTables.TopTopicsContract.RANDOM_TOPIC));
return Arrays.asList(topic1, topic2, topic3, topic4, topic5, randomTopic);
}
}
@@ -516,10 +511,10 @@
cursor.getString(
cursor.getColumnIndexOrThrow(
TopicsTables.CallerCanLearnTopicsContract.CALLER));
- Integer topic =
- Integer.parseInt(cursor.getString(
+ int topic =
+ cursor.getInt(
cursor.getColumnIndexOrThrow(
- TopicsTables.CallerCanLearnTopicsContract.TOPIC)));
+ TopicsTables.CallerCanLearnTopicsContract.TOPIC));
if (!callerCanLearnMap.containsKey(topic)) {
callerCanLearnMap.put(topic, new HashSet<>());
@@ -624,16 +619,17 @@
TopicsTables.ReturnedTopicContract.TAXONOMY_VERSION));
long modelVersion = cursor.getInt(cursor.getColumnIndexOrThrow(
TopicsTables.ReturnedTopicContract.MODEL_VERSION));
- String topicString = cursor.getString(cursor.getColumnIndexOrThrow(
- TopicsTables.ReturnedTopicContract.TOPIC));
+ int topicId =
+ cursor.getInt(
+ cursor.getColumnIndexOrThrow(
+ TopicsTables.ReturnedTopicContract.TOPIC));
// Building Map<EpochId, Map<Pair<AppId, AdTechId>, Topic>
if (!topicsMap.containsKey(cursorEpochId)) {
topicsMap.put(cursorEpochId, new HashMap<>());
}
- Topic topic = Topic.create(
- Integer.parseInt(topicString), taxonomyVersion, modelVersion);
+ Topic topic = Topic.create(topicId, taxonomyVersion, modelVersion);
topicsMap.get(cursorEpochId).put(Pair.create(app, sdk), topic);
}
}
diff --git a/adservices/service-core/java/com/android/adservices/data/topics/TopicsTables.java b/adservices/service-core/java/com/android/adservices/data/topics/TopicsTables.java
index 9e1bec9..acc6161 100644
--- a/adservices/service-core/java/com/android/adservices/data/topics/TopicsTables.java
+++ b/adservices/service-core/java/com/android/adservices/data/topics/TopicsTables.java
@@ -46,9 +46,12 @@
"CREATE TABLE "
+ TaxonomyContract.TABLE
+ "("
- + TaxonomyContract.ID + " INTEGER PRIMARY KEY, "
- + TaxonomyContract.VERSION + " TEXT, "
- + TaxonomyContract.TOPIC + " TEXT"
+ + TaxonomyContract.ID
+ + " INTEGER PRIMARY KEY, "
+ + TaxonomyContract.VERSION
+ + " INTEGER NOT NULL, "
+ + TaxonomyContract.TOPIC
+ + " INTEGER NOT NULL"
+ ")";
/**
@@ -72,12 +75,18 @@
"CREATE TABLE "
+ AppClassificationTopicsContract.TABLE
+ "("
- + AppClassificationTopicsContract.ID + " INTEGER PRIMARY KEY, "
- + AppClassificationTopicsContract.EPOCH_ID + " INTEGER NOT NULL, "
- + AppClassificationTopicsContract.APP + " TEXT NOT NULL, "
- + AppClassificationTopicsContract.TAXONOMY_VERSION + " INTEGER NOT NULL, "
- + AppClassificationTopicsContract.MODEL_VERSION + " INTEGER NOT NULL, "
- + AppClassificationTopicsContract.TOPIC + " TEXT NOT NULL"
+ + AppClassificationTopicsContract.ID
+ + " INTEGER PRIMARY KEY, "
+ + AppClassificationTopicsContract.EPOCH_ID
+ + " INTEGER NOT NULL, "
+ + AppClassificationTopicsContract.APP
+ + " TEXT NOT NULL, "
+ + AppClassificationTopicsContract.TAXONOMY_VERSION
+ + " INTEGER NOT NULL, "
+ + AppClassificationTopicsContract.MODEL_VERSION
+ + " INTEGER NOT NULL, "
+ + AppClassificationTopicsContract.TOPIC
+ + " INTEGER NOT NULL"
+ ")";
/**
@@ -100,10 +109,14 @@
"CREATE TABLE "
+ CallerCanLearnTopicsContract.TABLE
+ "("
- + CallerCanLearnTopicsContract.ID + " INTEGER PRIMARY KEY, "
- + CallerCanLearnTopicsContract.EPOCH_ID + " INTEGER NOT NULL, "
- + CallerCanLearnTopicsContract.CALLER + " TEXT NOT NULL, "
- + CallerCanLearnTopicsContract.TOPIC + " TEXT NOT NULL"
+ + CallerCanLearnTopicsContract.ID
+ + " INTEGER PRIMARY KEY, "
+ + CallerCanLearnTopicsContract.EPOCH_ID
+ + " INTEGER NOT NULL, "
+ + CallerCanLearnTopicsContract.CALLER
+ + " TEXT NOT NULL, "
+ + CallerCanLearnTopicsContract.TOPIC
+ + " INTEGER NOT NULL"
+ ")";
// TODO(b/223446202): Make this table to configurable numbers of top topics.
@@ -130,14 +143,22 @@
"CREATE TABLE "
+ TopTopicsContract.TABLE
+ "("
- + TopTopicsContract.ID + " INTEGER PRIMARY KEY, "
- + TopTopicsContract.EPOCH_ID + " INTEGER NOT NULL, "
- + TopTopicsContract.TOPIC1 + " TEXT NOT NULL, "
- + TopTopicsContract.TOPIC2 + " TEXT NOT NULL, "
- + TopTopicsContract.TOPIC3 + " TEXT NOT NULL, "
- + TopTopicsContract.TOPIC4 + " TEXT NOT NULL, "
- + TopTopicsContract.TOPIC5 + " TEXT NOT NULL, "
- + TopTopicsContract.RANDOM_TOPIC + " TEXT NOT NULL"
+ + TopTopicsContract.ID
+ + " INTEGER PRIMARY KEY, "
+ + TopTopicsContract.EPOCH_ID
+ + " INTEGER NOT NULL, "
+ + TopTopicsContract.TOPIC1
+ + " INTEGER NOT NULL, "
+ + TopTopicsContract.TOPIC2
+ + " INTEGER NOT NULL, "
+ + TopTopicsContract.TOPIC3
+ + " INTEGER NOT NULL, "
+ + TopTopicsContract.TOPIC4
+ + " INTEGER NOT NULL, "
+ + TopTopicsContract.TOPIC5
+ + " INTEGER NOT NULL, "
+ + TopTopicsContract.RANDOM_TOPIC
+ + " INTEGER NOT NULL"
+ ")";
/**
@@ -161,13 +182,20 @@
"CREATE TABLE "
+ ReturnedTopicContract.TABLE
+ "("
- + ReturnedTopicContract.ID + " INTEGER PRIMARY KEY, "
- + ReturnedTopicContract.EPOCH_ID + " INTEGER NOT NULL, "
- + ReturnedTopicContract.APP + " TEXT NOT NULL, "
- + ReturnedTopicContract.SDK + " TEXT NOT NULL, "
- + ReturnedTopicContract.TAXONOMY_VERSION + " INTEGER NOT NULL, "
- + ReturnedTopicContract.MODEL_VERSION + " INTEGER NOT NULL, "
- + ReturnedTopicContract.TOPIC + " TEXT NOT NULL"
+ + ReturnedTopicContract.ID
+ + " INTEGER PRIMARY KEY, "
+ + ReturnedTopicContract.EPOCH_ID
+ + " INTEGER NOT NULL, "
+ + ReturnedTopicContract.APP
+ + " TEXT NOT NULL, "
+ + ReturnedTopicContract.SDK
+ + " TEXT NOT NULL, "
+ + ReturnedTopicContract.TAXONOMY_VERSION
+ + " INTEGER NOT NULL, "
+ + ReturnedTopicContract.MODEL_VERSION
+ + " INTEGER NOT NULL, "
+ + ReturnedTopicContract.TOPIC
+ + " INTEGER NOT NULL"
+ ")";
/**
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/data/topics/TopicsTablesTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/data/topics/TopicsTablesTest.java
index e2c7848..9c0a45f 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/data/topics/TopicsTablesTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/data/topics/TopicsTablesTest.java
@@ -61,7 +61,7 @@
final long taxonomyVersion = 1L;
final int modelVersion = 1;
final String app = "app";
- final String topic = "topic1";
+ final int topic = 1;
ContentValues values = new ContentValues();
values.put(TopicsTables.AppClassificationTopicsContract.EPOCH_ID, epochId);
values.put(TopicsTables.AppClassificationTopicsContract.APP, app);
@@ -102,8 +102,11 @@
assertThat(cursor.getInt(cursor.getColumnIndexOrThrow(
TopicsTables.AppClassificationTopicsContract.MODEL_VERSION)))
.isEqualTo(modelVersion);
- assertThat(cursor.getString(cursor.getColumnIndexOrThrow(
- TopicsTables.AppClassificationTopicsContract.TOPIC))).isEqualTo(topic);
+ assertThat(
+ cursor.getInt(
+ cursor.getColumnIndexOrThrow(
+ TopicsTables.AppClassificationTopicsContract.TOPIC)))
+ .isEqualTo(topic);
assertThat(cursor.moveToNext()).isFalse();
}
}
@@ -114,7 +117,7 @@
final long taxonomyVersion = 1L;
final int modelVersion = 1;
final String app = "app";
- final String topic = "topic1";
+ final int topic = 1;
ContentValues values = new ContentValues();
values.put(TopicsTables.AppClassificationTopicsContract.EPOCH_ID, epochId);
values.put(TopicsTables.AppClassificationTopicsContract.APP, app);
@@ -148,7 +151,7 @@
values.put(TopicsTables.AppClassificationTopicsContract.MODEL_VERSION,
modelVersion);
- values.put(TopicsTables.AppClassificationTopicsContract.TOPIC, (String) null);
+ values.put(TopicsTables.AppClassificationTopicsContract.TOPIC, (Integer) null);
assertThat(mDb.insert(
TopicsTables.AppClassificationTopicsContract.TABLE, null, values))
.isEqualTo(-1);
@@ -159,7 +162,7 @@
public void testPersistAndGetCallerCanLearnTopicsContract() {
final long epochId = 1L;
final String caller = "caller";
- final String topic = "topic1";
+ final int topic = 1;
ContentValues values = new ContentValues();
values.put(TopicsTables.CallerCanLearnTopicsContract.EPOCH_ID, epochId);
values.put(TopicsTables.CallerCanLearnTopicsContract.CALLER, caller);
@@ -191,8 +194,11 @@
assertThat(cursor.moveToNext()).isTrue();
assertThat(cursor.getString(cursor.getColumnIndexOrThrow(
TopicsTables.CallerCanLearnTopicsContract.CALLER))).isEqualTo(caller);
- assertThat(cursor.getString(cursor.getColumnIndexOrThrow(
- TopicsTables.CallerCanLearnTopicsContract.TOPIC))).isEqualTo(topic);
+ assertThat(
+ cursor.getInt(
+ cursor.getColumnIndexOrThrow(
+ TopicsTables.CallerCanLearnTopicsContract.TOPIC)))
+ .isEqualTo(topic);
assertThat(cursor.moveToNext()).isFalse();
}
}
@@ -201,7 +207,7 @@
public void testCallerCanLearnTopicsContractSchema_notNull() {
final long epochId = 1L;
final String caller = "caller";
- final String topic = "topic1";
+ final int topic = 1;
ContentValues values = new ContentValues();
values.put(TopicsTables.CallerCanLearnTopicsContract.EPOCH_ID, epochId);
values.put(TopicsTables.CallerCanLearnTopicsContract.CALLER, caller);
@@ -219,7 +225,7 @@
.isEqualTo(-1);
values.put(TopicsTables.CallerCanLearnTopicsContract.CALLER, caller);
- values.put(TopicsTables.CallerCanLearnTopicsContract.TOPIC, (String) null);
+ values.put(TopicsTables.CallerCanLearnTopicsContract.TOPIC, (Integer) null);
assertThat(mDb.insert(
TopicsTables.CallerCanLearnTopicsContract.TABLE, null, values))
.isEqualTo(-1);
@@ -229,12 +235,12 @@
@Test
public void testPersistAndGetTopTopicsContract() {
final long epochId = 1L;
- final String topic1 = "topic1";
- final String topic2 = "topic2";
- final String topic3 = "topic3";
- final String topic4 = "topic4";
- final String topic5 = "topic5";
- final String randomTopic = "random_topic";
+ final int topic1 = 1;
+ final int topic2 = 2;
+ final int topic3 = 3;
+ final int topic4 = 4;
+ final int topic5 = 5;
+ final int randomTopic = 6;
ContentValues values = new ContentValues();
values.put(TopicsTables.TopTopicsContract.EPOCH_ID, epochId);
values.put(TopicsTables.TopTopicsContract.TOPIC1, topic1);
@@ -272,18 +278,36 @@
null, null)
) {
assertThat(cursor.moveToNext()).isTrue();
- assertThat(cursor.getString(cursor.getColumnIndexOrThrow(
- TopicsTables.TopTopicsContract.TOPIC1))).isEqualTo(topic1);
- assertThat(cursor.getString(cursor.getColumnIndexOrThrow(
- TopicsTables.TopTopicsContract.TOPIC2))).isEqualTo(topic2);
- assertThat(cursor.getString(cursor.getColumnIndexOrThrow(
- TopicsTables.TopTopicsContract.TOPIC3))).isEqualTo(topic3);
- assertThat(cursor.getString(cursor.getColumnIndexOrThrow(
- TopicsTables.TopTopicsContract.TOPIC4))).isEqualTo(topic4);
- assertThat(cursor.getString(cursor.getColumnIndexOrThrow(
- TopicsTables.TopTopicsContract.TOPIC5))).isEqualTo(topic5);
- assertThat(cursor.getString(cursor.getColumnIndexOrThrow(
- TopicsTables.TopTopicsContract.RANDOM_TOPIC))).isEqualTo(randomTopic);
+ assertThat(
+ cursor.getInt(
+ cursor.getColumnIndexOrThrow(
+ TopicsTables.TopTopicsContract.TOPIC1)))
+ .isEqualTo(topic1);
+ assertThat(
+ cursor.getInt(
+ cursor.getColumnIndexOrThrow(
+ TopicsTables.TopTopicsContract.TOPIC2)))
+ .isEqualTo(topic2);
+ assertThat(
+ cursor.getInt(
+ cursor.getColumnIndexOrThrow(
+ TopicsTables.TopTopicsContract.TOPIC3)))
+ .isEqualTo(topic3);
+ assertThat(
+ cursor.getInt(
+ cursor.getColumnIndexOrThrow(
+ TopicsTables.TopTopicsContract.TOPIC4)))
+ .isEqualTo(topic4);
+ assertThat(
+ cursor.getInt(
+ cursor.getColumnIndexOrThrow(
+ TopicsTables.TopTopicsContract.TOPIC5)))
+ .isEqualTo(topic5);
+ assertThat(
+ cursor.getInt(
+ cursor.getColumnIndexOrThrow(
+ TopicsTables.TopTopicsContract.RANDOM_TOPIC)))
+ .isEqualTo(randomTopic);
assertThat(cursor.moveToNext()).isFalse();
}
}
@@ -291,12 +315,12 @@
@Test
public void testTopTopicsContractContractSchema_notNull() {
final long epochId = 1L;
- final String topic1 = "topic1";
- final String topic2 = "topic2";
- final String topic3 = "topic3";
- final String topic4 = "topic4";
- final String topic5 = "topic5";
- final String randomTopic = "random_topic";
+ final int topic1 = 1;
+ final int topic2 = 2;
+ final int topic3 = 3;
+ final int topic4 = 4;
+ final int topic5 = 5;
+ final int randomTopic = 6;
ContentValues values = new ContentValues();
values.put(TopicsTables.TopTopicsContract.EPOCH_ID, epochId);
values.put(TopicsTables.TopTopicsContract.TOPIC1, topic1);
@@ -306,37 +330,37 @@
values.put(TopicsTables.TopTopicsContract.TOPIC5, topic5);
values.put(TopicsTables.TopTopicsContract.RANDOM_TOPIC, randomTopic);
- values.put(TopicsTables.TopTopicsContract.TOPIC1, (String) null);
+ values.put(TopicsTables.TopTopicsContract.TOPIC1, (Integer) null);
assertThat(mDb.insert(
TopicsTables.TopTopicsContract.TABLE, null, values))
.isEqualTo(-1);
values.put(TopicsTables.TopTopicsContract.TOPIC1, topic1);
- values.put(TopicsTables.TopTopicsContract.TOPIC2, (String) null);
+ values.put(TopicsTables.TopTopicsContract.TOPIC2, (Integer) null);
assertThat(mDb.insert(
TopicsTables.TopTopicsContract.TABLE, null, values))
.isEqualTo(-1);
values.put(TopicsTables.TopTopicsContract.TOPIC2, topic2);
- values.put(TopicsTables.TopTopicsContract.TOPIC3, (String) null);
+ values.put(TopicsTables.TopTopicsContract.TOPIC3, (Integer) null);
assertThat(mDb.insert(
TopicsTables.TopTopicsContract.TABLE, null, values))
.isEqualTo(-1);
values.put(TopicsTables.TopTopicsContract.TOPIC3, topic3);
- values.put(TopicsTables.TopTopicsContract.TOPIC4, (String) null);
+ values.put(TopicsTables.TopTopicsContract.TOPIC4, (Integer) null);
assertThat(mDb.insert(
TopicsTables.TopTopicsContract.TABLE, null, values))
.isEqualTo(-1);
values.put(TopicsTables.TopTopicsContract.TOPIC4, topic4);
- values.put(TopicsTables.TopTopicsContract.TOPIC5, (String) null);
+ values.put(TopicsTables.TopTopicsContract.TOPIC5, (Integer) null);
assertThat(mDb.insert(
TopicsTables.TopTopicsContract.TABLE, null, values))
.isEqualTo(-1);
values.put(TopicsTables.TopTopicsContract.TOPIC5, topic5);
- values.put(TopicsTables.TopTopicsContract.RANDOM_TOPIC, (String) null);
+ values.put(TopicsTables.TopTopicsContract.RANDOM_TOPIC, (Integer) null);
assertThat(mDb.insert(
TopicsTables.TopTopicsContract.TABLE, null, values))
.isEqualTo(-1);
@@ -350,7 +374,7 @@
final int modelVersion = 1;
final String app = "app";
final String sdk = "sdk";
- final String topic = "topic1";
+ final int topic = 1;
ContentValues values = new ContentValues();
values.put(TopicsTables.ReturnedTopicContract.EPOCH_ID, epochId);
values.put(TopicsTables.ReturnedTopicContract.APP, app);
@@ -395,8 +419,11 @@
assertThat(cursor.getInt(cursor.getColumnIndexOrThrow(
TopicsTables.ReturnedTopicContract.MODEL_VERSION)))
.isEqualTo(modelVersion);
- assertThat(cursor.getString(cursor.getColumnIndexOrThrow(
- TopicsTables.ReturnedTopicContract.TOPIC))).isEqualTo(topic);
+ assertThat(
+ cursor.getInt(
+ cursor.getColumnIndexOrThrow(
+ TopicsTables.ReturnedTopicContract.TOPIC)))
+ .isEqualTo(topic);
assertThat(cursor.moveToNext()).isFalse();
}
}
@@ -408,7 +435,7 @@
final int modelVersion = 1;
final String app = "app";
final String sdk = "sdk";
- final String topic = "topic1";
+ final int topic = 1;
ContentValues values = new ContentValues();
values.put(TopicsTables.ReturnedTopicContract.EPOCH_ID, epochId);
values.put(TopicsTables.ReturnedTopicContract.APP, app);
@@ -449,7 +476,7 @@
values.put(TopicsTables.ReturnedTopicContract.MODEL_VERSION,
modelVersion);
- values.put(TopicsTables.ReturnedTopicContract.TOPIC, (String) null);
+ values.put(TopicsTables.ReturnedTopicContract.TOPIC, (Integer) null);
assertThat(mDb.insert(
TopicsTables.ReturnedTopicContract.TABLE, null, values))
.isEqualTo(-1);