Skip to content

Commit

Permalink
Use static lists of columns in campaigns.Store methods (#12714)
Browse files Browse the repository at this point in the history
* Remove repetition of column names in store changeset methods

* Use lists of columns in campaigns store
  • Loading branch information
mrnugget committed Aug 5, 2020
1 parent b773625 commit d5394d3
Show file tree
Hide file tree
Showing 4 changed files with 191 additions and 334 deletions.
64 changes: 43 additions & 21 deletions enterprise/internal/campaigns/store_campaign_specs.go
Expand Up @@ -13,20 +13,34 @@ import (
"github.com/sourcegraph/sourcegraph/internal/db/dbutil"
)

const campaignSpecInsertCols = `
rand_id,
raw_spec,
spec,
namespace_user_id,
namespace_org_id,
user_id,
created_at,
updated_at
`
const campaignSpecInsertColsFmt = `(%s, %s, %s, %s, %s, %s, %s, %s)`
// campaignSpecColumns are used by the campaignSpec related Store methods to insert,
// update and query campaigns.
var campaignSpecColumns = []*sqlf.Query{
sqlf.Sprintf("campaign_specs.id"),
sqlf.Sprintf("campaign_specs.rand_id"),
sqlf.Sprintf("campaign_specs.raw_spec"),
sqlf.Sprintf("campaign_specs.spec"),
sqlf.Sprintf("campaign_specs.namespace_user_id"),
sqlf.Sprintf("campaign_specs.namespace_org_id"),
sqlf.Sprintf("campaign_specs.user_id"),
sqlf.Sprintf("campaign_specs.created_at"),
sqlf.Sprintf("campaign_specs.updated_at"),
}

// campaignSpecInsertColumns is the list of campaign_specs columns that are
// modified when updating/inserting campaign specs.
var campaignSpecInsertColumns = []*sqlf.Query{
sqlf.Sprintf("rand_id"),
sqlf.Sprintf("raw_spec"),
sqlf.Sprintf("spec"),
sqlf.Sprintf("namespace_user_id"),
sqlf.Sprintf("namespace_org_id"),
sqlf.Sprintf("user_id"),
sqlf.Sprintf("created_at"),
sqlf.Sprintf("updated_at"),
}

const campaignSpecCols = `
id,` + campaignSpecInsertCols
const campaignSpecInsertColsFmt = `(%s, %s, %s, %s, %s, %s, %s, %s)`

// CreateCampaignSpec creates the given CampaignSpec.
func (s *Store) CreateCampaignSpec(ctx context.Context, c *campaigns.CampaignSpec) error {
Expand All @@ -39,9 +53,9 @@ func (s *Store) CreateCampaignSpec(ctx context.Context, c *campaigns.CampaignSpe

var createCampaignSpecQueryFmtstr = `
-- source: enterprise/internal/campaigns/store_campaign_specs.go:CreateCampaignSpec
INSERT INTO campaign_specs (` + campaignSpecInsertCols + `)
INSERT INTO campaign_specs (%s)
VALUES ` + campaignSpecInsertColsFmt + `
RETURNING` + campaignSpecCols + `;`
RETURNING %s`

func (s *Store) createCampaignSpecQuery(c *campaigns.CampaignSpec) (*sqlf.Query, error) {
spec, err := jsonbColumn(c.Spec)
Expand All @@ -65,6 +79,7 @@ func (s *Store) createCampaignSpecQuery(c *campaigns.CampaignSpec) (*sqlf.Query,

return sqlf.Sprintf(
createCampaignSpecQueryFmtstr,
sqlf.Join(campaignSpecInsertColumns, ", "),
c.RandID,
c.RawSpec,
spec,
Expand All @@ -73,6 +88,7 @@ func (s *Store) createCampaignSpecQuery(c *campaigns.CampaignSpec) (*sqlf.Query,
c.UserID,
c.CreatedAt,
c.UpdatedAt,
sqlf.Join(campaignSpecColumns, ", "),
), nil
}

Expand All @@ -91,9 +107,9 @@ func (s *Store) UpdateCampaignSpec(ctx context.Context, c *campaigns.CampaignSpe
var updateCampaignSpecQueryFmtstr = `
-- source: enterprise/internal/campaigns/store_campaign_specs.go:UpdateCampaignSpec
UPDATE campaign_specs
SET (` + campaignSpecInsertCols + `) = ` + campaignSpecInsertColsFmt + `
SET (%s) = ` + campaignSpecInsertColsFmt + `
WHERE id = %s
RETURNING ` + campaignSpecCols
RETURNING %s`

func (s *Store) updateCampaignSpecQuery(c *campaigns.CampaignSpec) (*sqlf.Query, error) {
spec, err := jsonbColumn(c.Spec)
Expand All @@ -105,6 +121,7 @@ func (s *Store) updateCampaignSpecQuery(c *campaigns.CampaignSpec) (*sqlf.Query,

return sqlf.Sprintf(
updateCampaignSpecQueryFmtstr,
sqlf.Join(campaignSpecInsertColumns, ", "),
c.RandID,
c.RawSpec,
spec,
Expand All @@ -114,6 +131,7 @@ func (s *Store) updateCampaignSpecQuery(c *campaigns.CampaignSpec) (*sqlf.Query,
c.CreatedAt,
c.UpdatedAt,
c.ID,
sqlf.Join(campaignSpecColumns, ", "),
), nil
}

Expand Down Expand Up @@ -165,8 +183,7 @@ func (s *Store) GetCampaignSpec(ctx context.Context, opts GetCampaignSpecOpts) (

var getCampaignSpecsQueryFmtstr = `
-- source: enterprise/internal/campaigns/store_campaign_specs.go:GetCampaignSpec
SELECT ` + campaignSpecCols + `
FROM campaign_specs
SELECT %s FROM campaign_specs
WHERE %s
LIMIT 1
`
Expand All @@ -185,7 +202,11 @@ func getCampaignSpecQuery(opts *GetCampaignSpecOpts) *sqlf.Query {
preds = append(preds, sqlf.Sprintf("TRUE"))
}

return sqlf.Sprintf(getCampaignSpecsQueryFmtstr, sqlf.Join(preds, "\n AND "))
return sqlf.Sprintf(
getCampaignSpecsQueryFmtstr,
sqlf.Join(campaignSpecColumns, ", "),
sqlf.Join(preds, "\n AND "),
)
}

// ListCampaignSpecsOpts captures the query options needed for
Expand Down Expand Up @@ -219,7 +240,7 @@ func (s *Store) ListCampaignSpecs(ctx context.Context, opts ListCampaignSpecsOpt

var listCampaignSpecsQueryFmtstr = `
-- source: enterprise/internal/campaigns/store_campaign_specs.go:ListCampaignSpecs
SELECT ` + campaignSpecCols + ` FROM campaign_specs
SELECT %s FROM campaign_specs
WHERE %s
ORDER BY id ASC
`
Expand All @@ -241,6 +262,7 @@ func listCampaignSpecsQuery(opts *ListCampaignSpecsOpts) *sqlf.Query {

return sqlf.Sprintf(
listCampaignSpecsQueryFmtstr+limitClause,
sqlf.Join(campaignSpecColumns, ", "),
sqlf.Join(preds, "\n AND "),
)
}
Expand Down
126 changes: 47 additions & 79 deletions enterprise/internal/campaigns/store_campaigns.go
Expand Up @@ -8,6 +8,40 @@ import (
"github.com/sourcegraph/sourcegraph/internal/db/dbutil"
)

// campaignColumns are used by the campaign related Store methods to insert,
// update and query campaigns.
var campaignColumns = []*sqlf.Query{
sqlf.Sprintf("campaigns.id"),
sqlf.Sprintf("campaigns.name"),
sqlf.Sprintf("campaigns.description"),
sqlf.Sprintf("campaigns.branch"),
sqlf.Sprintf("campaigns.author_id"),
sqlf.Sprintf("campaigns.namespace_user_id"),
sqlf.Sprintf("campaigns.namespace_org_id"),
sqlf.Sprintf("campaigns.created_at"),
sqlf.Sprintf("campaigns.updated_at"),
sqlf.Sprintf("campaigns.changeset_ids"),
sqlf.Sprintf("campaigns.closed_at"),
sqlf.Sprintf("campaigns.campaign_spec_id"),
}

// campaignInsertColumns is the list of campaign columns that are modified in
// CreateCampaign and UpdateCampaign.
// update and query campaigns.
var campaignInsertColumns = []*sqlf.Query{
sqlf.Sprintf("name"),
sqlf.Sprintf("description"),
sqlf.Sprintf("branch"),
sqlf.Sprintf("author_id"),
sqlf.Sprintf("namespace_user_id"),
sqlf.Sprintf("namespace_org_id"),
sqlf.Sprintf("created_at"),
sqlf.Sprintf("updated_at"),
sqlf.Sprintf("changeset_ids"),
sqlf.Sprintf("closed_at"),
sqlf.Sprintf("campaign_spec_id"),
}

// CreateCampaign creates the given Campaign.
func (s *Store) CreateCampaign(ctx context.Context, c *campaigns.Campaign) error {
q, err := s.createCampaignQuery(c)
Expand All @@ -22,33 +56,9 @@ func (s *Store) CreateCampaign(ctx context.Context, c *campaigns.Campaign) error

var createCampaignQueryFmtstr = `
-- source: enterprise/internal/campaigns/store.go:CreateCampaign
INSERT INTO campaigns (
name,
description,
branch,
author_id,
namespace_user_id,
namespace_org_id,
created_at,
updated_at,
changeset_ids,
closed_at,
campaign_spec_id
)
INSERT INTO campaigns (%s)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
RETURNING
id,
name,
description,
branch,
author_id,
namespace_user_id,
namespace_org_id,
created_at,
updated_at,
changeset_ids,
closed_at,
campaign_spec_id
RETURNING %s
`

func (s *Store) createCampaignQuery(c *campaigns.Campaign) (*sqlf.Query, error) {
Expand All @@ -67,6 +77,7 @@ func (s *Store) createCampaignQuery(c *campaigns.Campaign) (*sqlf.Query, error)

return sqlf.Sprintf(
createCampaignQueryFmtstr,
sqlf.Join(campaignInsertColumns, ", "),
c.Name,
c.Description,
c.Branch,
Expand All @@ -78,6 +89,7 @@ func (s *Store) createCampaignQuery(c *campaigns.Campaign) (*sqlf.Query, error)
changesetIDs,
nullTimeColumn(c.ClosedAt),
nullInt64Column(c.CampaignSpecID),
sqlf.Join(campaignColumns, ", "),
), nil
}

Expand All @@ -94,32 +106,9 @@ func (s *Store) UpdateCampaign(ctx context.Context, c *campaigns.Campaign) error
var updateCampaignQueryFmtstr = `
-- source: enterprise/internal/campaigns/store.go:UpdateCampaign
UPDATE campaigns
SET (
name,
description,
branch,
author_id,
namespace_user_id,
namespace_org_id,
updated_at,
changeset_ids,
closed_at,
campaign_spec_id
) = (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
SET (%s) = (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
WHERE id = %s
RETURNING
id,
name,
description,
branch,
author_id,
namespace_user_id,
namespace_org_id,
created_at,
updated_at,
changeset_ids,
closed_at,
campaign_spec_id
RETURNING %s
`

func (s *Store) updateCampaignQuery(c *campaigns.Campaign) (*sqlf.Query, error) {
Expand All @@ -132,17 +121,20 @@ func (s *Store) updateCampaignQuery(c *campaigns.Campaign) (*sqlf.Query, error)

return sqlf.Sprintf(
updateCampaignQueryFmtstr,
sqlf.Join(campaignInsertColumns, ", "),
c.Name,
c.Description,
c.Branch,
c.AuthorID,
nullInt32Column(c.NamespaceUserID),
nullInt32Column(c.NamespaceOrgID),
c.CreatedAt,
c.UpdatedAt,
changesetIDs,
nullTimeColumn(c.ClosedAt),
nullInt64Column(c.CampaignSpecID),
c.ID,
sqlf.Join(campaignColumns, ", "),
), nil
}

Expand Down Expand Up @@ -233,20 +225,7 @@ func (s *Store) GetCampaign(ctx context.Context, opts GetCampaignOpts) (*campaig

var getCampaignsQueryFmtstr = `
-- source: enterprise/internal/campaigns/store.go:GetCampaign
SELECT
campaigns.id,
campaigns.name,
campaigns.description,
campaigns.branch,
campaigns.author_id,
campaigns.namespace_user_id,
campaigns.namespace_org_id,
campaigns.created_at,
campaigns.updated_at,
campaigns.changeset_ids,
campaigns.closed_at,
campaigns.campaign_spec_id
FROM campaigns
SELECT %s FROM campaigns
WHERE %s
LIMIT 1
`
Expand Down Expand Up @@ -280,6 +259,7 @@ func getCampaignQuery(opts *GetCampaignOpts) *sqlf.Query {

return sqlf.Sprintf(
getCampaignsQueryFmtstr,
sqlf.Join(campaignColumns, ", "),
sqlf.Join(preds, "\n AND "),
)
}
Expand Down Expand Up @@ -319,20 +299,7 @@ func (s *Store) ListCampaigns(ctx context.Context, opts ListCampaignsOpts) (cs [

var listCampaignsQueryFmtstr = `
-- source: enterprise/internal/campaigns/store.go:ListCampaigns
SELECT
id,
name,
description,
branch,
author_id,
namespace_user_id,
namespace_org_id,
created_at,
updated_at,
changeset_ids,
closed_at,
campaign_spec_id
FROM campaigns
SELECT %s FROM campaigns
WHERE %s
ORDER BY id ASC
LIMIT %s
Expand Down Expand Up @@ -365,6 +332,7 @@ func listCampaignsQuery(opts *ListCampaignsOpts) *sqlf.Query {

return sqlf.Sprintf(
listCampaignsQueryFmtstr,
sqlf.Join(campaignColumns, ", "),
sqlf.Join(preds, "\n AND "),
opts.Limit,
)
Expand Down

0 comments on commit d5394d3

Please sign in to comment.