@@ -603,107 +603,3 @@ func allMatchingStrings(re *regexpsyntax.Regexp) (exact, contains, prefix, suffi
603
603
604
604
return nil , nil , nil , nil , nil
605
605
}
606
-
607
- const upsertSQL = `
608
- WITH upsert AS (
609
- UPDATE repo
610
- SET
611
- name = $1,
612
- description = $2,
613
- fork = $3,
614
- enabled = $4,
615
- external_id = NULLIF(BTRIM($5), ''),
616
- external_service_type = NULLIF(BTRIM($6), ''),
617
- external_service_id = NULLIF(BTRIM($7), ''),
618
- archived = $9
619
- WHERE name = $1 OR (
620
- external_id IS NOT NULL
621
- AND external_service_type IS NOT NULL
622
- AND external_service_id IS NOT NULL
623
- AND NULLIF(BTRIM($5), '') IS NOT NULL
624
- AND NULLIF(BTRIM($6), '') IS NOT NULL
625
- AND NULLIF(BTRIM($7), '') IS NOT NULL
626
- AND external_id = NULLIF(BTRIM($5), '')
627
- AND external_service_type = NULLIF(BTRIM($6), '')
628
- AND external_service_id = NULLIF(BTRIM($7), '')
629
- )
630
- RETURNING repo.name
631
- )
632
-
633
- INSERT INTO repo (
634
- name,
635
- description,
636
- fork,
637
- language,
638
- enabled,
639
- external_id,
640
- external_service_type,
641
- external_service_id,
642
- archived
643
- ) (
644
- SELECT
645
- $1 AS name,
646
- $2 AS description,
647
- $3 AS fork,
648
- $8 AS language,
649
- $4 AS enabled,
650
- NULLIF(BTRIM($5), '') AS external_id,
651
- NULLIF(BTRIM($6), '') AS external_service_type,
652
- NULLIF(BTRIM($7), '') AS external_service_id,
653
- $9 AS archived
654
- WHERE NOT EXISTS (SELECT 1 FROM upsert)
655
- )`
656
-
657
- // Upsert updates the repository if it already exists (keyed on name) and
658
- // inserts it if it does not.
659
- //
660
- // If repo exists, op.Enabled is ignored.
661
- func (s * repos ) Upsert (ctx context.Context , op api.InsertRepoOp ) error {
662
- if Mocks .Repos .Upsert != nil {
663
- return Mocks .Repos .Upsert (op )
664
- }
665
-
666
- insert := false
667
- language := ""
668
- enabled := op .Enabled
669
-
670
- // We optimistically assume the repo is already in the table, so first
671
- // check if it is. We then fallback to the upsert functionality. The
672
- // upsert is logged as a modification to the DB, even if it is a no-op. So
673
- // we do this check to avoid log spam if postgres is configured with
674
- // log_statement='mod'.
675
- r , err := s .GetByName (ctx , op .Name )
676
- if err != nil {
677
- if _ , ok := err .(* repoNotFoundErr ); ! ok {
678
- return err
679
- }
680
- insert = true // missing
681
- } else {
682
- enabled = true
683
- language = r .Language
684
- // Ignore Enabled for deciding to update
685
- insert = (op .Description != r .Description ) ||
686
- (op .Fork != r .Fork ) ||
687
- (! op .ExternalRepo .Equal (& r .ExternalRepo ))
688
- }
689
-
690
- if ! insert {
691
- return nil
692
- }
693
-
694
- _ , err = dbconn .Global .ExecContext (
695
- ctx ,
696
- upsertSQL ,
697
- op .Name ,
698
- op .Description ,
699
- op .Fork ,
700
- enabled ,
701
- op .ExternalRepo .ID ,
702
- op .ExternalRepo .ServiceType ,
703
- op .ExternalRepo .ServiceID ,
704
- language ,
705
- op .Archived ,
706
- )
707
-
708
- return err
709
- }
0 commit comments