Replace query with dynamic table with simple union (5x faster)
diff --git a/api.go b/api.go
index 66da238..dbddea5 100644
--- a/api.go
+++ b/api.go
@@ -107,16 +107,7 @@
log.Debug("Found tenant_id='", tenantId, "' with env='", env, "' for scopeuuid='", scopeuuid, "'")
sSql := `
- WITH ALL_DEVELOPERS AS (
- SELECT d.id, d.name, d.status
- FROM DEVELOPER as d
- INNER JOIN APP as a ON a.parent_id = d.id
- UNION ALL
- SELECT c.id, c.name, c.status
- FROM COMPANY as c
- INNER JOIN APP as a ON a.parent_id = c.id
- )
- SELECT
+ SELECT
ap.api_resources,
ap.environments,
c.issued_at,
@@ -139,7 +130,33 @@
AND UPPER(mp.status) = 'APPROVED'
AND UPPER(a.status) = 'APPROVED'
AND c.id = $1
- AND c.tenant_id = $2);`
+ AND c.tenant_id = $2)
+ UNION
+ SELECT
+ ap.api_resources,
+ ap.environments,
+ c.issued_at,
+ c.status,
+ a.callback_url,
+ ad.name,
+ ad.id
+ FROM
+ APP_CREDENTIAL AS c
+ INNER JOIN APP AS a ON c.app_id = a.id
+ INNER JOIN ALL_DEVELOPERS AS ad
+ ON (ad.id = a.company_id OR ad.id = a.developer_id)
+ INNER JOIN APP_CREDENTIAL_APIPRODUCT_MAPPER as mp
+ ON mp.appcred_id = c.id
+ INNER JOIN API_PRODUCT as ap ON ap.id = mp.apiprdt_id
+ WHERE (UPPER(ad.status) = 'ACTIVE'
+ AND mp.apiprdt_id = ap.id
+ AND mp.app_id = a.id
+ AND mp.appcred_id = c.id
+ AND UPPER(mp.status) = 'APPROVED'
+ AND UPPER(a.status) = 'APPROVED'
+ AND c.id = $1
+ AND c.tenant_id = $2)
+ ;`
var status, redirectionURIs, developerAppName, developerId, resName, resEnv string
var issuedAt int64