Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions internal/store/postgres/org_billing_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -411,10 +411,10 @@ func processStringDataType(filter rql.Filter, query *goqu.SelectDataset) *goqu.S
query = query.Where(goqu.Cast(goqu.I(filter.Name), "TEXT").NotIn(strings.Split(filter.Value.(string), ",")))
case OPERATOR_LIKE:
// some semi string sql types like UUID require casting to text to support like operator
query = query.Where(goqu.L(fmt.Sprintf(`"%s"::TEXT LIKE '%s'`, filter.Name, filter.Value.(string))))
query = query.Where(goqu.L(fmt.Sprintf(`"%s"::TEXT ILIKE '%s'`, filter.Name, filter.Value.(string))))
Comment thread
rsbh marked this conversation as resolved.
Outdated
case OPERATOR_NOT_LIKE:
// some semi string sql types like UUID require casting to text to support like operator
query = query.Where(goqu.L(fmt.Sprintf(`"%s"::TEXT NOT LIKE '%s'`, filter.Name, filter.Value.(string))))
query = query.Where(goqu.L(fmt.Sprintf(`"%s"::TEXT NOT ILIKE '%s'`, filter.Name, filter.Value.(string))))
Comment thread
paanSinghCoder marked this conversation as resolved.
Outdated
default:
query = query.Where(goqu.Ex{filter.Name: goqu.Op{filter.Operator: filter.Value.(string)}})
}
Expand Down
17 changes: 17 additions & 0 deletions internal/store/postgres/org_billing_repository_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,23 @@ func TestPrepareDataQuery(t *testing.T) {
wantParameters: []interface{}{"canceled", int64(1), "active", "free", "premium", "%test%", "%test%", "%test%", "%test%", "%test%", "%test%", int64(20), int64(40)},
wantErr: false,
},
{
name: "query with like filter",
rqlQuery: &rql.Query{
Filters: []rql.Filter{
{
Name: "title",
Operator: "like",
Value: "%fah%",
},
},
Limit: 10,
Offset: 0,
},
wantSQL: `SELECT "id", "title", "name", "state", "avatar", "updated_at", "created_at", "created_by", "country", "plan_id", "plan_name", "subscription_state", "subscription_cycle_end_at", "plan_interval" FROM (SELECT "organizations"."id" AS "id", "organizations"."title" AS "title", "organizations"."name" AS "name", "organizations"."avatar" AS "avatar", "organizations"."created_at" AS "created_at", "organizations"."updated_at" AS "updated_at", "organizations"."state" AS "state", organizations.metadata->>'country' AS "country", organizations.metadata->>'poc' AS "created_by", "billing_plans"."id" AS "plan_id", "billing_plans"."name" AS "plan_name", "billing_plans"."interval" AS "plan_interval", "billing_subscriptions"."state" AS "subscription_state", "billing_subscriptions"."trial_ends_at", "billing_subscriptions"."current_period_end_at" AS "subscription_cycle_end_at", ROW_NUMBER() OVER (PARTITION BY "organizations"."id" ORDER BY "billing_subscriptions"."created_at" DESC) AS "row_num" FROM "organizations" LEFT JOIN "billing_customers" ON ("organizations"."id" = "billing_customers"."org_id") LEFT JOIN "billing_subscriptions" ON (("billing_subscriptions"."customer_id" = "billing_customers"."id") AND ("billing_subscriptions"."state" != $1)) LEFT JOIN "billing_plans" ON ("billing_plans"."id" = "billing_subscriptions"."plan_id")) AS "ranked_subscriptions" WHERE (("row_num" = $2) AND "title"::TEXT ILIKE '%fah%') LIMIT $3`,
wantParameters: []interface{}{"canceled", int64(1), int64(10)},
Comment thread
paanSinghCoder marked this conversation as resolved.
Outdated
wantErr: false,
},
{
name: "query with invalid filter",
rqlQuery: &rql.Query{
Expand Down
Loading