killbill-memoizeit
Changes
analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessAccountFieldSqlDao.sql.stg 15(+9 -6)
Details
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountFieldMapper.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountFieldMapper.java
index 7cb7260..411af1a 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountFieldMapper.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountFieldMapper.java
@@ -18,6 +18,7 @@ package com.ning.billing.analytics.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.util.UUID;
import org.skife.jdbi.v2.StatementContext;
import org.skife.jdbi.v2.tweak.ResultSetMapper;
@@ -27,6 +28,10 @@ import com.ning.billing.analytics.model.BusinessAccountField;
public class BusinessAccountFieldMapper implements ResultSetMapper<BusinessAccountField> {
@Override
public BusinessAccountField map(final int index, final ResultSet r, final StatementContext ctx) throws SQLException {
- return new BusinessAccountField(r.getString(1), r.getString(2), r.getString(3));
+ final UUID accountId = UUID.fromString(r.getString(1));
+ final String accountKey = r.getString(2);
+ final String name = r.getString(3);
+ final String value = r.getString(4);
+ return new BusinessAccountField(accountId, accountKey, name, value);
}
}
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountFieldSqlDao.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountFieldSqlDao.java
index d982772..3bf8b43 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountFieldSqlDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountFieldSqlDao.java
@@ -33,10 +33,11 @@ public interface BusinessAccountFieldSqlDao {
List<BusinessAccountField> getFieldsForAccount(@Bind("account_key") final String accountKey);
@SqlUpdate
- int addField(@Bind("account_key") final String accountKey, @Bind("name") final String name, @Bind("value") final String value);
+ int addField(@Bind("account_id") final String accountId, @Bind("account_key") final String accountKey,
+ @Bind("name") final String name, @Bind("value") final String value);
@SqlUpdate
- int removeField(@Bind("account_key") final String accountKey, @Bind("name") final String name);
+ int removeField(@Bind("account_id") final String accountId, @Bind("name") final String name);
@SqlUpdate
void test();
diff --git a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessAccountField.java b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessAccountField.java
index 3d9df23..b422838 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessAccountField.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessAccountField.java
@@ -16,14 +16,22 @@
package com.ning.billing.analytics.model;
+import java.util.UUID;
+
public class BusinessAccountField extends BusinessField {
+ private final UUID accountId;
private final String accountKey;
- public BusinessAccountField(final String accountKey, final String name, final String value) {
+ public BusinessAccountField(final UUID accountId, final String accountKey, final String name, final String value) {
super(name, value);
+ this.accountId = accountId;
this.accountKey = accountKey;
}
+ public UUID getAccountId() {
+ return accountId;
+ }
+
public String getAccountKey() {
return accountKey;
}
@@ -32,7 +40,8 @@ public class BusinessAccountField extends BusinessField {
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("BusinessAccountField");
- sb.append("{accountKey='").append(accountKey).append('\'');
+ sb.append("{accountId='").append(accountId).append('\'');
+ sb.append(", accountKey='").append(accountKey).append('\'');
sb.append(", name='").append(getName()).append('\'');
sb.append(", value='").append(getValue()).append('\'');
sb.append('}');
@@ -50,6 +59,9 @@ public class BusinessAccountField extends BusinessField {
final BusinessAccountField that = (BusinessAccountField) o;
+ if (accountId != null ? !accountId.equals(that.accountId) : that.accountId != null) {
+ return false;
+ }
if (accountKey != null ? !accountKey.equals(that.accountKey) : that.accountKey != null) {
return false;
}
@@ -65,7 +77,8 @@ public class BusinessAccountField extends BusinessField {
@Override
public int hashCode() {
- int result = accountKey != null ? accountKey.hashCode() : 0;
+ int result = accountId != null ? accountId.hashCode() : 0;
+ result = 31 * result + (accountKey != null ? accountKey.hashCode() : 0);
result = 31 * result + (getName() != null ? getName().hashCode() : 0);
result = 31 * result + (getValue() != null ? getValue().hashCode() : 0);
return result;
diff --git a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessAccountFieldSqlDao.sql.stg b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessAccountFieldSqlDao.sql.stg
index 8bb9e0b..2566476 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessAccountFieldSqlDao.sql.stg
+++ b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessAccountFieldSqlDao.sql.stg
@@ -2,7 +2,8 @@ group BusinessAccountField;
getFieldsForAccount(account_key) ::=<<
select
- account_key
+ account_id
+, account_key
, name
, value
from bac_fields
@@ -12,20 +13,22 @@ where account_key = :account_key
addField(account_key, name, value) ::=<<
insert into bac_fields (
- account_key
+ account_id
+, account_key
, name
, value
) values (
- :account_key
+ :account_id
+, :account_key
, :name
, :value
);
>>
-removeField(account_key, name) ::= <<
-delete from bac_fields where account_key = :account_key and name = :name;
+removeField(account_id, name) ::= <<
+delete from bac_fields where account_id = :account_id and name = :name;
>>
test() ::= <<
select 1 from bac_fields;
->>
\ No newline at end of file
+>>
diff --git a/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql b/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
index 69ccdc8..a2b1b4f 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
+++ b/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
@@ -145,6 +145,7 @@ create table bac_tags (
drop table if exists bac_fields;
create table bac_fields (
record_id int(11) unsigned not null auto_increment
+, account_id char(36) not null
, account_key varchar(50) not null comment 'Account external key'
, name varchar(30) not null
, value varchar(255) default null
diff --git a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessAccountFieldSqlDao.java b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessAccountFieldSqlDao.java
index 69fed56..2dae790 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessAccountFieldSqlDao.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessAccountFieldSqlDao.java
@@ -38,46 +38,50 @@ public class TestBusinessAccountFieldSqlDao extends TestWithEmbeddedDB {
@Test(groups = "slow")
public void testCRUD() throws Exception {
+ final UUID accountId = UUID.randomUUID();
final String accountKey = UUID.randomUUID().toString();
final String name = UUID.randomUUID().toString().substring(0, 30);
final String value = UUID.randomUUID().toString();
// Verify initial state
Assert.assertEquals(accountFieldSqlDao.getFieldsForAccount(accountKey).size(), 0);
- Assert.assertEquals(accountFieldSqlDao.removeField(accountKey, name), 0);
+ Assert.assertEquals(accountFieldSqlDao.removeField(accountId.toString(), name), 0);
// Add an entry
- Assert.assertEquals(accountFieldSqlDao.addField(accountKey, name, value), 1);
+ Assert.assertEquals(accountFieldSqlDao.addField(accountId.toString(), accountKey, name, value), 1);
final List<BusinessAccountField> fieldsForAccount = accountFieldSqlDao.getFieldsForAccount(accountKey);
Assert.assertEquals(fieldsForAccount.size(), 1);
// Retrieve it
final BusinessAccountField accountField = fieldsForAccount.get(0);
+ Assert.assertEquals(accountField.getAccountId(), accountId);
Assert.assertEquals(accountField.getAccountKey(), accountKey);
Assert.assertEquals(accountField.getName(), name);
Assert.assertEquals(accountField.getValue(), value);
// Delete it
- Assert.assertEquals(accountFieldSqlDao.removeField(accountKey, name), 1);
+ Assert.assertEquals(accountFieldSqlDao.removeField(accountId.toString(), name), 1);
Assert.assertEquals(accountFieldSqlDao.getFieldsForAccount(accountKey).size(), 0);
}
@Test(groups = "slow")
public void testSegmentation() throws Exception {
+ final UUID accountId1 = UUID.randomUUID();
final String accountKey1 = UUID.randomUUID().toString();
final String name1 = UUID.randomUUID().toString().substring(0, 30);
+ final UUID accountId2 = UUID.randomUUID();
final String accountKey2 = UUID.randomUUID().toString();
final String name2 = UUID.randomUUID().toString().substring(0, 30);
// Add a field to both accounts
- Assert.assertEquals(accountFieldSqlDao.addField(accountKey1, name1, UUID.randomUUID().toString()), 1);
- Assert.assertEquals(accountFieldSqlDao.addField(accountKey2, name2, UUID.randomUUID().toString()), 1);
+ Assert.assertEquals(accountFieldSqlDao.addField(accountId1.toString(), accountKey1, name1, UUID.randomUUID().toString()), 1);
+ Assert.assertEquals(accountFieldSqlDao.addField(accountId2.toString(), accountKey2, name2, UUID.randomUUID().toString()), 1);
Assert.assertEquals(accountFieldSqlDao.getFieldsForAccount(accountKey1).size(), 1);
Assert.assertEquals(accountFieldSqlDao.getFieldsForAccount(accountKey2).size(), 1);
// Remove the field for the first account
- Assert.assertEquals(accountFieldSqlDao.removeField(accountKey1, name1), 1);
+ Assert.assertEquals(accountFieldSqlDao.removeField(accountId1.toString(), name1), 1);
Assert.assertEquals(accountFieldSqlDao.getFieldsForAccount(accountKey1).size(), 0);
Assert.assertEquals(accountFieldSqlDao.getFieldsForAccount(accountKey2).size(), 1);
diff --git a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessAccountField.java b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessAccountField.java
index ebe3c9e..86ce86c 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessAccountField.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessAccountField.java
@@ -26,20 +26,24 @@ import com.ning.billing.analytics.AnalyticsTestSuite;
public class TestBusinessAccountField extends AnalyticsTestSuite {
@Test(groups = "fast")
public void testEquals() throws Exception {
+ final UUID accountId = UUID.randomUUID();
final String accountKey = UUID.randomUUID().toString();
final String name = UUID.randomUUID().toString();
final String value = UUID.randomUUID().toString();
- final BusinessAccountField accountField = new BusinessAccountField(accountKey,
+ final BusinessAccountField accountField = new BusinessAccountField(accountId,
+ accountKey,
name,
value);
Assert.assertSame(accountField, accountField);
Assert.assertEquals(accountField, accountField);
Assert.assertTrue(accountField.equals(accountField));
+ Assert.assertEquals(accountField.getAccountId(), accountId);
Assert.assertEquals(accountField.getAccountKey(), accountKey);
Assert.assertEquals(accountField.getName(), name);
Assert.assertEquals(accountField.getValue(), value);
- final BusinessAccountField otherAccountField = new BusinessAccountField(UUID.randomUUID().toString(),
+ final BusinessAccountField otherAccountField = new BusinessAccountField(UUID.randomUUID(),
+ UUID.randomUUID().toString(),
UUID.randomUUID().toString(),
UUID.randomUUID().toString());
Assert.assertFalse(accountField.equals(otherAccountField));