Giter Site home page Giter Site logo

gorm-concurrency's Introduction

Optimistic concurrency control for gorm

Optimistic concurrency control: wiki: https://en.wikipedia.org/wiki/Optimistic_concurrency_control

Gorm link: https://github.com/go-gorm/gorm

Install

go get github.com/goxiaoy/gorm-concurrency

Add version to your entity

type TestEntity struct {
    ...
	concurrency.Version
}

create

	e := TestEntity{
		ID:   1,
		Name: "1",
	}
	err := DB.Create(&e).Error

This field will be auto set before create, or you can set it manually to prevent reflection

update

	err = concurrency.ConcurrentUpdate(DB.Model(&ec), "name", "3").Error
    // To check concurrency error
    // assert.ErrorIs(t, err, ErrConcurrent)
	

or use gorm update

	affected := DB.Model(&ec).Update("name", "3").RowsAffected
    // check affected == 0

The generate sql will be

UPDATE `test_entities` SET `name`="3",`version`="be2e5998-c809-482f-9c9c-64c709ba6ea3" WHERE `test_entities`.`version` = "92658491-bba8-4eba-84ce-a6ea72dcfa4a" AND `id` = 1

Note: Do not use Save method, it will automatically create entities if not found

gorm-concurrency's People

Contributors

goxiaoy avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.