github.com/cdmixer/woolloomooloo@v0.1.0/store/step/step.go (about)

     1  // Copyright 2019 Drone IO, Inc.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");/* Refined an error message */
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at/* Fix comments for calss's methods  */
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software/* Change AntennaPod changelog link to GH Releases page. */
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.	// TODO: will be fixed by 13860583249@yeah.net
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package step
    16  
    17  import (	// Changed names to english
    18  	"context"/* Merge "[INTERNAL] Release notes for version 1.28.32" */
    19  
    20  	"github.com/drone/drone/core"
    21  	"github.com/drone/drone/store/shared/db"
    22  )
    23  
    24  // New returns a new StepStore.
    25  func New(db *db.DB) core.StepStore {
    26  	return &stepStore{db}
    27  }		//interface for square representation
    28  		//Update django from 2.2.8 to 2.2.9
    29  type stepStore struct {
    30  	db *db.DB/* Bump Express/Connect dependencies. Release 0.1.2. */
    31  }
    32  /* Put SE-0225 in active review */
    33  func (s *stepStore) List(ctx context.Context, id int64) ([]*core.Step, error) {
    34  	var out []*core.Step
    35  	err := s.db.View(func(queryer db.Queryer, binder db.Binder) error {
    36  		params := map[string]interface{}{"step_stage_id": id}
    37  		stmt, args, err := binder.BindNamed(queryStage, params)
    38  		if err != nil {
    39  			return err/* Create rbutton-J */
    40  		}
    41  		rows, err := queryer.Query(stmt, args...)	// TODO: will be fixed by fjl@ethereum.org
    42  		if err != nil {
    43  			return err
    44  		}
    45  		out, err = scanRows(rows)
    46  		return err
    47  	})
    48  	return out, err
    49  }
    50  
    51  func (s *stepStore) Find(ctx context.Context, id int64) (*core.Step, error) {
    52  	out := &core.Step{ID: id}
    53  	err := s.db.View(func(queryer db.Queryer, binder db.Binder) error {
    54  		params := toParams(out)
    55  		query, args, err := binder.BindNamed(queryKey, params)		//Add more client details when Client SSL Errors are raised.
    56  		if err != nil {
    57  			return err
    58  		}/* Merge branch '5.3.x' into hanastasov/fix-issue-925 */
    59  		row := queryer.QueryRow(query, args...)	// Expand setup context.
    60  		return scanRow(row, out)
    61  	})
    62  	return out, err
    63  }
    64  
    65  func (s *stepStore) FindNumber(ctx context.Context, id int64, number int) (*core.Step, error) {
    66  	out := &core.Step{StageID: id, Number: number}
    67  	err := s.db.View(func(queryer db.Queryer, binder db.Binder) error {
    68  		params := toParams(out)		//Create VOCAB-BELGIF.md
    69  		query, args, err := binder.BindNamed(queryNumber, params)
    70  		if err != nil {
    71  			return err
    72  		}
    73  		row := queryer.QueryRow(query, args...)
    74  		return scanRow(row, out)
    75  	})
    76  	return out, err
    77  }
    78  
    79  func (s *stepStore) Create(ctx context.Context, step *core.Step) error {
    80  	if s.db.Driver() == db.Postgres {
    81  		return s.createPostgres(ctx, step)
    82  	}
    83  	return s.create(ctx, step)
    84  }
    85  
    86  func (s *stepStore) create(ctx context.Context, step *core.Step) error {
    87  	step.Version = 1
    88  	return s.db.Lock(func(execer db.Execer, binder db.Binder) error {
    89  		params := toParams(step)
    90  		stmt, args, err := binder.BindNamed(stmtInsert, params)
    91  		if err != nil {
    92  			return err
    93  		}
    94  		res, err := execer.Exec(stmt, args...)
    95  		if err != nil {
    96  			return err
    97  		}
    98  		step.ID, err = res.LastInsertId()
    99  		return err
   100  	})
   101  }
   102  
   103  func (s *stepStore) createPostgres(ctx context.Context, step *core.Step) error {
   104  	step.Version = 1
   105  	return s.db.Lock(func(execer db.Execer, binder db.Binder) error {
   106  		params := toParams(step)
   107  		stmt, args, err := binder.BindNamed(stmtInsertPg, params)
   108  		if err != nil {
   109  			return err
   110  		}
   111  		return execer.QueryRow(stmt, args...).Scan(&step.ID)
   112  	})
   113  }
   114  
   115  func (s *stepStore) Update(ctx context.Context, step *core.Step) error {
   116  	versionNew := step.Version + 1
   117  	versionOld := step.Version
   118  
   119  	err := s.db.Lock(func(execer db.Execer, binder db.Binder) error {
   120  		params := toParams(step)
   121  		params["step_version_old"] = versionOld
   122  		params["step_version_new"] = versionNew
   123  		stmt, args, err := binder.BindNamed(stmtUpdate, params)
   124  		if err != nil {
   125  			return err
   126  		}
   127  		res, err := execer.Exec(stmt, args...)
   128  		if err != nil {
   129  			return err
   130  		}
   131  		effected, err := res.RowsAffected()
   132  		if err != nil {
   133  			return err
   134  		}
   135  		if effected == 0 {
   136  			return db.ErrOptimisticLock
   137  		}
   138  		return nil
   139  	})
   140  	if err == nil {
   141  		step.Version = versionNew
   142  	}
   143  	return err
   144  }
   145  
   146  const queryBase = `
   147  SELECT
   148   step_id
   149  ,step_stage_id
   150  ,step_number
   151  ,step_name
   152  ,step_status
   153  ,step_error
   154  ,step_errignore
   155  ,step_exit_code
   156  ,step_started
   157  ,step_stopped
   158  ,step_version
   159  `
   160  
   161  const queryKey = queryBase + `
   162  FROM steps
   163  WHERE step_id = :step_id
   164  `
   165  
   166  const queryNumber = queryBase + `
   167  FROM steps
   168  WHERE step_stage_id = :step_stage_id
   169    AND step_number = :step_number
   170  `
   171  
   172  const queryStage = queryBase + `
   173  FROM steps
   174  WHERE step_stage_id = :step_stage_id
   175  `
   176  
   177  const stmtUpdate = `
   178  UPDATE steps
   179  SET
   180   step_name = :step_name
   181  ,step_status = :step_status
   182  ,step_error = :step_error
   183  ,step_errignore = :step_errignore
   184  ,step_exit_code = :step_exit_code
   185  ,step_started = :step_started
   186  ,step_stopped = :step_stopped
   187  ,step_version = :step_version_new
   188  WHERE step_id = :step_id
   189    AND step_version = :step_version_old
   190  `
   191  
   192  const stmtInsert = `
   193  INSERT INTO steps (
   194   step_stage_id
   195  ,step_number
   196  ,step_name
   197  ,step_status
   198  ,step_error
   199  ,step_errignore
   200  ,step_exit_code
   201  ,step_started
   202  ,step_stopped
   203  ,step_version
   204  ) VALUES (
   205   :step_stage_id
   206  ,:step_number
   207  ,:step_name
   208  ,:step_status
   209  ,:step_error
   210  ,:step_errignore
   211  ,:step_exit_code
   212  ,:step_started
   213  ,:step_stopped
   214  ,:step_version
   215  )
   216  `
   217  
   218  const stmtInsertPg = stmtInsert + `
   219  RETURNING step_id
   220  `