// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.

// Code generated by "make generate" from the Store interface
// DO NOT EDIT

// To add a public method, create an entry in the Store interface,
// prefix it with a @withTransaction comment if you need it to be
// transactional and then add a private method in the store itself
// with db sq.BaseRunner as the first parameter before running `make
// generate`

package sqlstore

import (
	"context"
	"time"

    "github.com/mattermost/focalboard/server/model"

    "github.com/mattermost/mattermost/server/public/shared/mlog"
	mmModel "github.com/mattermost/mattermost/server/public/model"
)

{{range $index, $element := .Methods}}
func (s *SQLStore) {{$index}}({{$element.Params | joinParamsWithType}}) {{$element.Results | joinResultsForSignature}} {
    {{- if $element.WithTransaction}}
    	if s.dbType == model.SqliteDBType {
    	    return s.{{$index | renameStoreMethod}}(s.db, {{$element.Params | joinParams}})
    	}
    	tx, txErr := s.db.BeginTx(context.Background(), nil)
        if txErr != nil {
            return {{ genErrorResultsVars $element.Results "txErr"}}
    	}

        {{- if $element.Results | len | eq 0}}
    	s.{{$index | renameStoreMethod}}(tx, {{$element.Params | joinParams}})

        if err := tx.Commit(); err != nil {
           return {{ genErrorResultsVars $element.Results "err"}}
        }
    	{{else}}
    		{{genResultsVars $element.Results false }} := s.{{$index | renameStoreMethod}}(tx, {{$element.Params | joinParams}})
    		{{- if $element.Results | errorPresent }}
    			if {{$element.Results | errorVar}} != nil {
                    if rollbackErr := tx.Rollback(); rollbackErr != nil {
                       s.logger.Error("transaction rollback error", mlog.Err(rollbackErr), mlog.String("methodName", "{{$index}}"))
                    }
                    return {{ genErrorResultsVars $element.Results "err"}}
    			}
    		{{end}}
            if err := tx.Commit(); err != nil {
               return {{ genErrorResultsVars $element.Results "err"}}
            }

	    	return {{ genResultsVars $element.Results true -}}
	    {{end}}
    {{else}}
    return s.{{$index | renameStoreMethod}}(s.db, {{$element.Params | joinParams}})
    {{end}}
}
{{end}}
