Skip to content

Commit

Permalink
fix: slow queries for account linking (#248)
Browse files Browse the repository at this point in the history
* fix: account linking indexes

* fix: version and changelog
  • Loading branch information
sattvikc authored Feb 11, 2025
1 parent 4b3e69f commit 71e0b65
Show file tree
Hide file tree
Showing 6 changed files with 71 additions and 1 deletion.
18 changes: 18 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,24 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [8.0.1]

- Fixes slow queries for account linking

### Migration

```sql
CREATE INDEX IF NOT EXISTS emailpassword_users_email_index ON emailpassword_users (app_id, email);
CREATE INDEX IF NOT EXISTS emailpassword_user_to_tenant_email_index ON emailpassword_user_to_tenant (app_id, tenant_id, email);

CREATE INDEX IF NOT EXISTS passwordless_users_email_index ON passwordless_users (app_id, email);
CREATE INDEX IF NOT EXISTS passwordless_users_phone_number_index ON passwordless_users (app_id, phone_number);
CREATE INDEX IF NOT EXISTS passwordless_user_to_tenant_email_index ON passwordless_user_to_tenant (app_id, tenant_id, email);
CREATE INDEX IF NOT EXISTS passwordless_user_to_tenant_phone_number_index ON passwordless_user_to_tenant (app_id, tenant_id, phone_number);

CREATE INDEX IF NOT EXISTS thirdparty_user_to_tenant_third_party_user_id_index ON thirdparty_user_to_tenant (app_id, tenant_id, third_party_id, third_party_user_id);
```

## [8.0.0]

- Adds tables and queries for Bulk Import
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ plugins {
id 'java-library'
}

version = "8.0.0"
version = "8.0.1"

repositories {
mavenCentral()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,11 @@ static String getQueryToCreateUsersTable(Start start) {
// @formatter:on
}

static String getQueryToCreateEmailPasswordUsersEmailIndex(Start start) {
return "CREATE INDEX emailpassword_users_email_index ON "
+ Config.getConfig(start).getEmailPasswordUsersTable() + "(app_id, email);";
}

static String getQueryToCreateEmailPasswordUserToTenantTable(Start start) {
String schema = Config.getConfig(start).getTableSchema();
String emailPasswordUserToTenantTable = Config.getConfig(start).getEmailPasswordUserToTenantTable();
Expand All @@ -84,6 +89,11 @@ static String getQueryToCreateEmailPasswordUserToTenantTable(Start start) {
// @formatter:on
}

static String getQueryToCreateEmailPasswordUserToTenantEmailIndex(Start start) {
return "CREATE INDEX emailpassword_user_to_tenant_email_index ON "
+ Config.getConfig(start).getEmailPasswordUserToTenantTable() + "(app_id, tenant_id, email);";
}

static String getQueryToCreatePasswordResetTokensTable(Start start) {
String schema = Config.getConfig(start).getTableSchema();
String passwordResetTokensTable = Config.getConfig(start).getPasswordResetTokensTable();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -389,12 +389,19 @@ public static void createTablesIfNotExists(Start start, Connection con) throws S
if (!doesTableExists(start, con, Config.getConfig(start).getEmailPasswordUsersTable())) {
getInstance(start).addState(CREATING_NEW_TABLE, null);
update(con, EmailPasswordQueries.getQueryToCreateUsersTable(start), NO_OP_SETTER);

// index
update(con, EmailPasswordQueries.getQueryToCreateEmailPasswordUsersEmailIndex(start), NO_OP_SETTER);
}

if (!doesTableExists(start, con, Config.getConfig(start).getEmailPasswordUserToTenantTable())) {
getInstance(start).addState(CREATING_NEW_TABLE, null);
update(con, EmailPasswordQueries.getQueryToCreateEmailPasswordUserToTenantTable(start),
NO_OP_SETTER);

// index
update(con, EmailPasswordQueries.getQueryToCreateEmailPasswordUserToTenantEmailIndex(start),
NO_OP_SETTER);
}

if (!doesTableExists(start, con, Config.getConfig(start).getPasswordResetTokensTable())) {
Expand Down Expand Up @@ -432,6 +439,9 @@ public static void createTablesIfNotExists(Start start, Connection con) throws S
if (!doesTableExists(start, con, Config.getConfig(start).getThirdPartyUserToTenantTable())) {
getInstance(start).addState(CREATING_NEW_TABLE, null);
update(con, ThirdPartyQueries.getQueryToCreateThirdPartyUserToTenantTable(start), NO_OP_SETTER);

// index
update(con, ThirdPartyQueries.getQueryToCreateThirdPartyUserToTenantThirdPartyUserIdIndex(start), NO_OP_SETTER);
}

if (!doesTableExists(start, con, Config.getConfig(start).getJWTSigningKeysTable())) {
Expand All @@ -451,12 +461,19 @@ public static void createTablesIfNotExists(Start start, Connection con) throws S
update(con, getQueryToCreateUserIdAppIdIndexForUsersTable(start), NO_OP_SETTER);
update(con, getQueryToCreateAppIdIndexForUsersTable(start), NO_OP_SETTER);
update(con, getQueryToCreateTenantIdIndexForUsersTable(start), NO_OP_SETTER);

update(con, PasswordlessQueries.getQueryToCreatePasswordlessUsersEmailIndex(start), NO_OP_SETTER);
update(con, PasswordlessQueries.getQueryToCreatePasswordlessUsersPhoneNumberIndex(start), NO_OP_SETTER);
}

if (!doesTableExists(start, con, Config.getConfig(start).getPasswordlessUserToTenantTable())) {
getInstance(start).addState(CREATING_NEW_TABLE, null);
update(con, PasswordlessQueries.getQueryToCreatePasswordlessUserToTenantTable(start),
NO_OP_SETTER);

// index
update(con, PasswordlessQueries.getQueryToCreatePasswordlessUserToTenantEmailIndex(start), NO_OP_SETTER);
update(con, PasswordlessQueries.getQueryToCreatePasswordlessUserToTenantPhoneNumberIndex(start), NO_OP_SETTER);
}

if (!doesTableExists(start, con, Config.getConfig(start).getPasswordlessDevicesTable())) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,16 @@ public static String getQueryToCreateUsersTable(Start start) {
+ ");";
}

static String getQueryToCreatePasswordlessUsersEmailIndex(Start start) {
return "CREATE INDEX passwordless_users_email_index ON "
+ Config.getConfig(start).getPasswordlessUsersTable() + "(app_id, email);";
}

static String getQueryToCreatePasswordlessUsersPhoneNumberIndex(Start start) {
return "CREATE INDEX passwordless_users_phone_number_index ON "
+ Config.getConfig(start).getPasswordlessUsersTable() + "(app_id, phone_number);";
}

static String getQueryToCreatePasswordlessUserToTenantTable(Start start) {
String schema = Config.getConfig(start).getTableSchema();
String passwordlessUserToTenantTable = Config.getConfig(start).getPasswordlessUserToTenantTable();
Expand All @@ -90,6 +100,16 @@ static String getQueryToCreatePasswordlessUserToTenantTable(Start start) {
// @formatter:on
}

static String getQueryToCreatePasswordlessUserToTenantEmailIndex(Start start) {
return "CREATE INDEX passwordless_user_to_tenant_email_index ON "
+ Config.getConfig(start).getPasswordlessUserToTenantTable() + "(app_id, tenant_id, email);";
}

static String getQueryToCreatePasswordlessUserToTenantPhoneNumberIndex(Start start) {
return "CREATE INDEX passwordless_user_to_tenant_phone_number_index ON "
+ Config.getConfig(start).getPasswordlessUserToTenantTable() + "(app_id, tenant_id, phone_number);";
}

public static String getQueryToCreateDevicesTable(Start start) {
String schema = Config.getConfig(start).getTableSchema();
String devicesTable = Config.getConfig(start).getPasswordlessDevicesTable();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,11 @@ static String getQueryToCreateThirdPartyUserToTenantTable(Start start) {
// @formatter:on
}

static String getQueryToCreateThirdPartyUserToTenantThirdPartyUserIdIndex(Start start) {
return "CREATE INDEX thirdparty_user_to_tenant_third_party_user_id_index ON "
+ Config.getConfig(start).getThirdPartyUserToTenantTable() + "(app_id, tenant_id, third_party_id, third_party_user_id);";
}

public static AuthRecipeUserInfo signUp(Start start, TenantIdentifier tenantIdentifier, String id, String email,
LoginMethod.ThirdParty thirdParty, long timeJoined)
throws StorageQueryException, StorageTransactionLogicException {
Expand Down

0 comments on commit 71e0b65

Please sign in to comment.