go_queryset

package module
v1.0.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 16, 2022 License: MIT Imports: 6 Imported by: 0

README

go-queryset GoDoc Go Report Card Codacy Badge Maintainability Build Status Coverage Status

100% type-safe ORM for Go (Golang) with code generation and MySQL, PostgreSQL, Sqlite3, SQL Server support. GORM under the hood.

Contents

Installation

go get -u github.com/shiqiyue/go-queryset/cmd/goqueryset

Usage

Define models

Imagine you have model User in your models.go file:

type User struct {
	gorm.Model
	Rating      int
	RatingMarks int
}

Now transform it by adding comments for query set generation:

//go:generate goqueryset -in models.go

// User struct represent user model. Next line (gen:qs) is needed to autogenerate UserQuerySet.
// gen:qs
type User struct {
	gorm.Model
	Rating      int
	RatingMarks int
}

Take a look at line // gen:qs. It's a necessary line to enable querysets for this struct. You can put it at any line in struct's doc-comment.

Then execute next shell command:

go generate ./...

And you will get file autogenerated_models.go in the same directory (and package) as models.go.

In this autogenerated file you will find a lot of autogenerated typesafe methods like these:

func (qs UserQuerySet) CreatedAtGte(createdAt time.Time) UserQuerySet {
	return qs.w(qs.db.Where("created_at >= ?", createdAt))
}

func (qs UserQuerySet) RatingGt(rating int) UserQuerySet {
	return qs.w(qs.db.Where("rating > ?", rating))
}

func (qs UserQuerySet) IDEq(ID uint) UserQuerySet {
	return qs.w(qs.db.Where("id = ?", ID))
}

func (qs UserQuerySet) DeletedAtIsNull() UserQuerySet {
	return qs.w(qs.db.Where("deleted_at IS NULL"))
}

func (o *User) Delete(db *gorm.DB) error {
	return db.Delete(o).Error
}

func (qs UserQuerySet) OrderAscByCreatedAt() UserQuerySet {
	return qs.w(qs.db.Order("created_at ASC"))
}

See full autogenerated file here.

Now you can use this queryset for creating/reading/updating/deleting. Let's take a look at these operations.

Relation with GORM

You can embed and not embed gorm.Model into your model (e.g. if you don't need DeletedAt field), but you must use *gorm.DB to properly work. Don't worry if you don't use GORM yet, it's easy to create *gorm.DB:

import (
    "gorm.io/gorm"
    _ "gorm.io/gorm/dialects/mysql"
)

func getGormDB() *gorm.DB {
	db, err := gorm.Open("mysql", "user:password@/dbname?charset=utf8&parseTime=True&loc=Local")
	// ...
}

If you already use another ORM or raw sql.DB, you can reuse your sql.DB object (to reuse connections pool):

	var sqlDB *sql.DB = getSQLDBFromAnotherORM()
	var gormDB *gorm.DB
	gormDB, err = gorm.Open("mysql", sqlDB)

Create

u := User{
	Rating: 5,
	RatingMarks: 0,
}
err := u.Create(getGormDB())

Under the hood Create method just calls db.Create(&u).

Select

It's the most powerful feature of query set. Let's execute some queries:

Select all users
var users []User
err := NewUserQuerySet(getGormDB()).All(&users)
if err == gorm.ErrRecordNotFound {
	// no records were found
}

It generates this SQL request for MySQL:

SELECT * FROM `users` WHERE `users`.deleted_at IS NULL

deleted_at filtering is added by GORM (soft-delete), to disable it use Unscoped.

Select one user
var user User
err := NewUserQuerySet(getGormDB()).One(&user)
Select N users with highest rating
var users []User
err := NewUserQuerySet(getGormDB()).
	RatingMarksGte(minMarks).
	OrderDescByRating().
	Limit(N).
	All(&users)
Select users registered today

In this example we will define custom method on generated UserQuerySet for later reuse in multiple functions:

func (qs UserQuerySet) RegisteredToday() UserQuerySet {
	// autogenerated typesafe method CreatedAtGte(time.Time)
	return qs.CreatedAtGte(getTodayBegin())
}

...
var users []User
err := NewUserQuerySet(getGormDB()).
	RegisteredToday().
	OrderDescByCreatedAt().
	Limit(N).
	All(&users)
Select specific fields

By default all fields are fetched using the * field selector. using the select methd it is possible to limit the SQL statement to fetch specific fields:

var users []User
err := NewUserQuerySet(getGormDB()).Select(UserDBSchema.ID, UserDBSchema.Rating).All(&users)
if err == gorm.ErrRecordNotFound {
	// no records were found
}

It generates this SQL request for MySQL:

SELECT id, rating FROM `users` WHERE `users`.deleted_at IS NULL

Update

Update one record by primary key
u := User{
	Model: gorm.Model{
		ID: uint(7),
	},
	Rating: 1,
}
err := u.Update(getGormDB(), UserDBSchema.Rating)

Goqueryset generates DB names for struct fields into UserDBSchema variable. In this example we used UserDBSchema.Rating.

And this code generates next SQL:

UPDATE `users` SET `rating` = ? WHERE `users`.deleted_at IS NULL AND `users`.`id` = ?
Update multiple record or without model object

Sometimes we don't have model object or we are updating multiple rows in DB. For these cases there is another typesafe interface:

err := NewUserQuerySet(getGormDB()).
	RatingLt(1).
	GetUpdater().
	SetRatingMarks(0).
	Update()
UPDATE `users` SET `rating_marks` = ? WHERE `users`.deleted_at IS NULL AND ((rating < ?))
UpdateNum

This method makes the same sql queries as Update() method, except return values: it returns number of affected rows and error

num, err := NewUserQuerySet(getGormDB()).
	RatingLt(1).
	GetUpdater().
	SetRatingMarks(0).
	UpdateNum()
UPDATE `users` SET `rating_marks` = ? WHERE `users`.deleted_at IS NULL AND ((rating < ?))

Delete

Delete one record by primary key
u := User{
	Model: gorm.Model{
		ID: uint(7),
	},
}
err := u.Delete(getGormDB())
Delete multiple records
err := NewUserQuerySet(getGormDB()).
	RatingMarksEq(0).
	Delete()

Full list of generated methods

QuerySet methods - func (qs {StructName}QuerySet)
  • create new queryset: New{StructName}QuerySet(db *gorm.DB)
func NewUserQuerySet(db *gorm.DB) UserQuerySet
  • filter by field (where)

    • all field types
      • Equals: {FieldName}(Eq|Ne)(arg {FieldType})
      func (qs UserQuerySet) RatingEq(rating int) UserQuerySet
      
      • In: {FieldName}(Not)In(arg {FieldType}, argsRest ...{FieldType})
      func (qs UserQuerySet) NameIn(name string, nameRest ...string) UserQuerySet {}
      func (qs UserQuerySet) NameNotIn(name string, nameRest ...string) UserQuerySet {}
      
      • Order(Asc|Desc)By{FieldName}()
      func (qs UserQuerySet) OrderDescByRating() UserQuerySet
      
    • numeric types (int, int64, uint etc + time.Time):
      • {FieldName}(Lt|Lte|Gt|Gte)(arg {FieldType)
      func (qs UserQuerySet) RatingGt(rating int) UserQuerySet
      
    • string types (string):
      • {FieldName}(Like/Notlike)(arg {FieldType)
      func (qs UserQuerySet) NameLike(name string) UserQuerySet
      
    • pointer fields: {FieldName}IsNull(), {FieldName}IsNotNull()
    func (qs UserQuerySet) ProfileIsNull() UserQuerySet {}
    func (qs UserQuerySet) ProfileIsNotNull() UserQuerySet {}
    
  • preload related object (for structs fields or pointers to structs fields): Preload{FieldName}() For struct

    	type User struct {
    		profile *Profile
    	}
    

    will be generated:

    func (qs UserQuerySet) PreloadProfile() UserQuerySet
    

    Preload functions call gorm.Preload to preload related object.

  • selectors

    • Select all objects, return gorm.ErrRecordNotFound if no records
    func (qs UserQuerySet) All(users *[]User) error
    
    • Select one object, return gorm.ErrRecordNotFound if no records
    func (qs UserQuerySet) One(user *User) error
    
  • Limit

func (qs UserQuerySet) Limit(limit int) UserQuerySet
  • get updater (for update + where, based on current queryset):
func (qs UserQuerySet) GetUpdater() UserUpdater
  • delete with conditions from current queryset: Delete()
func (qs UserQuerySet) Delete() error
  • Aggregations
    • Count
    func (qs UserQuerySet) Count() (int, error)
    
Object methods - func (u *User)
  • create object
func (o *User) Create(db *gorm.DB) error
  • delete object by PK
func (o *User) Delete(db *gorm.DB) error
  • update object by PK
func (o *User) Update(db *gorm.DB, fields ...userDBSchemaField) error

Pay attention that field names are automatically generated into variable

type userDBSchemaField string

// UserDBSchema stores db field names of User
var UserDBSchema = struct {
	ID          userDBSchemaField
	CreatedAt   userDBSchemaField
	UpdatedAt   userDBSchemaField
	DeletedAt   userDBSchemaField
	Rating      userDBSchemaField
	RatingMarks userDBSchemaField
}{

	ID:          userDBSchemaField("id"),
	CreatedAt:   userDBSchemaField("created_at"),
	UpdatedAt:   userDBSchemaField("updated_at"),
	DeletedAt:   userDBSchemaField("deleted_at"),
	Rating:      userDBSchemaField("rating"),
	RatingMarks: userDBSchemaField("rating_marks"),
}

And they are typed, so you won't have string-misprint error.

Updater methods - func (u UserUpdater)
  • set field: Set{FieldName}
func (u UserUpdater) SetCreatedAt(createdAt time.Time) UserUpdater
  • execute update: Update()
func (u UserUpdater) Update() error

Golang version

Golang >= 1.8 is required. Tested on go 1.8, 1.9 versions by Travis CI

Why?

Why not just use GORM?

I like GORM: it's the best ORM for golang, it has fantastic documentation, but as a Golang developers team lead I can point out some troubles with it:

  1. GORM isn't typesafe: it's so easy to spend 1 hour trying to execute simple Update. GORM gets all arguments as interface{} and in the case of invalid GORM usage you won't get error: you will get invalid SQL, no SQL (!) and error == nil etc. It's easy to get SELECT * FROM t WHERE string_field == 1 SQL in production without type safety.
  2. GORM is difficult for beginners because of unclear interface{} interfaces: one can't easily find which arguments to pass to GORM methods.

Why not another ORM?

Type-safety, like with GORM.

Why not any ORM?

I didn't see any ORM that properly handles code duplication. GORM is the best with Scopes support, but even it's far from ideal. E.g. we have GORM and next typical code:

type User struct {
	gorm.Model
	Rating      int
	RatingMarks int
}

func GetUsersWithMaxRating(limit int) ([]User, error) {
	var users []User
	if err := getGormDB().Order("rating DESC").Limit(limit).Find(&users).Error; err != nil {
		return nil, err
	}
	return users, nil
}

func GetUsersRegisteredToday(limit int) ([]User, error) {
	var users []User
	today := getTodayBegin()
	err := getGormDB().Where("created_at >= ?", today).Limit(limit).Find(&users).Error
	if err != nil {
		return nil, err
	}
	return users, nil
}

At one moment PM asks us to implement new function, returning list of users registered today AND sorted by rating. Copy-paste way is to add Order("rating DESC") to GetUsersRegisteredToday. But it leads to typical copy-paste troubles: when we change rating calculation logics (e.g. to .Where("rating_marks >= ?", 10).Order("rating DESC")) we must change it in two places.

How to solve it? First idea is to make reusable functions:

func queryUsersWithMaxRating(db *gorm.DB, limit int) *gorm.DB {
	return db.Order("rating DESC").Limit(limit)
}

func queryUsersRegisteredToday(db *gorm.DB, limit int) *gorm.DB {
	today := getTodayBegin()
	return db.Where("created_at >= ?", today).Limit(limit)
}

func GetUsersWithMaxRating(limit int) ([]User, error) {
	var users []User
	if err := queryUsersWithMaxRating(getGormDB(), limit).Find(&users).Error; err != nil {
		return nil, err
	}
	return users, nil
}

func GetUsersRegisteredToday(limit int) ([]User, error) {
	var users []User
	if err := queryUsersRegisteredToday(getGormDB(), limit).Find(&users).Error; err != nil {
		return nil, err
	}
	return users, nil
}

func GetUsersRegisteredTodayWithMaxRating(limit int) ([]User, error) {
	var users []User
	err := queryUsersWithMaxRating(queryUsersRegisteredToday(getGormDB(), limit), limit).
		Find(&users).Error
	if err != nil {
		return nil, err
	}
	return users, nil
}

We can use GORM Scopes to improve how it looks:

func queryUsersWithMaxRating(db *gorm.DB) *gorm.DB {
	return db.Order("rating DESC")
}

func queryUsersRegisteredToday(db *gorm.DB) *gorm.DB {
	return db.Where("created_at >= ?", getTodayBegin())
}

func GetUsersRegisteredTodayWithMaxRating(limit int) ([]User, error) {
	var users []User
	err := getGormDB().
		Scopes(queryUsersWithMaxRating, queryUsersRegisteredToday).
		Limit(limit).
		Find(&users).Error
	if err != nil {
		return nil, err
	}
	return users, nil
}

Looks nice, but we loosed ability to parametrize our reusable GORM queries (scopes): they must have only one argument of type *gorm.DB. It means that we must move out Limit from them (let's say we get it from user). If we need to implement query QueryUsersRegisteredAfter(db *gorm.DB, t time.Time) - we can't do it.

Now compare it with go-queryset solution:

// UserQuerySet is an autogenerated struct with a lot of typesafe methods.
// We can define any methods on it because it's in the same package
func (qs UserQuerySet) WithMaxRating(minMarks int) UserQuerySet {
	return qs.RatingMarksGte(minMarks).OrderDescByRating()
}

func (qs UserQuerySet) RegisteredToday() UserQuerySet {
	// autogenerated typesafe method CreatedAtGte(time.Time)
	return qs.CreatedAtGte(getTodayBegin())
}

// now we can parametrize it
const minRatingMarks = 10

func GetUsersWithMaxRating(limit int) ([]User, error) {
	var users []User
	err := NewUserQuerySet(getGormDB()).
		WithMaxRating(minRatingMarks). // reuse our method
		Limit(limit).                  // autogenerated typesafe method Limit(int)
		All(&users)                    // autogenerated typesafe method All(*[]User)
	if err != nil {
		return nil, err
	}
	return users, nil
}

func GetUsersRegisteredToday(limit int) ([]User, error) {
	var users []User
	err := NewUserQuerySet(getGormDB()).
		RegisteredToday(). // reuse our method
		Limit(limit).      // autogenerated typesafe method Limit(int)
		All(&users)        // autogenerated typesafe method All(*[]User)
	if err != nil {
		return nil, err
	}
	return users, nil
}

func GetUsersRegisteredTodayWithMaxRating(limit int) ([]User, error) {
	var users []User
	err := NewUserQuerySet(getGormDB()).
		RegisteredToday().             // reuse our method
		WithMaxRating(minRatingMarks). // reuse our method
		Limit(limit).
		All(&users) // autogenerated typesafe method All(*[]User)
	if err != nil {
		return nil, err
	}
	return users, nil
}

Why not raw SQL queries?

No type-safety, a lot of boilerplate code.

Why not go-kallax?

  1. It works only with PostgreSQL. Go-queryset supports mysql, postgresql, sqlite, mssql etc (all that gorm supports).
  2. Lacks simplier model updating interface

How it relates to another languages ORMs

QuerySet pattern is similar to:

Features

  • 100% typesafe: there is no one method with interface{} arguments.
  • QuerySet pattern allows to reuse queries by defining custom methods on it.
  • Supports all DBMS that GORM supports: MySQL, PostgreSQL, Sqlite3, SQL Server.
  • Supports creating, selecting, updating, deleting of objects.

Limitations

  • Joins aren't supported
  • Struct tags aren't supported

Performance

Runtime

Performance is similar to GORM performance. GORM uses reflection and it may be slow, so why don't we generate raw SQL code?

  1. Despite the fact GORM uses reflection, it's the most popular ORM for golang. There are really few tasks where you are CPU-bound while working with DB, usually you are CPU-bound in machine with DB and network/disk bound on machine with golang server.
  2. Premature optimization is the root of all evil.
  3. Go-queryset is fully compatible with GORM.
  4. Code generation is used here not to speedup things, but to create nice interfaces.
  5. The main purpose of go-queryset isn't speed, but usage convenience.

Code generation

Code generation is fast:

  1. We parse AST of needed file and find needed structs.
  2. We load package and parse it by go/types
  3. We don't use reflect module for parsing, because it's slow

Documentation

Overview

Code generated by go-queryset. DO NOT EDIT.

Index

Constants

This section is empty.

Variables

View Source
var TagDBSchema = struct {
	ID             TagDBSchemaField
	CreatedAt      TagDBSchemaField
	UpdatedAt      TagDBSchemaField
	Name           TagDBSchemaField
	Aliases        TagDBSchemaField
	Disabled       TagDBSchemaField
	DisabledReason TagDBSchemaField
	DisabledAt     TagDBSchemaField
	DisabledBy     TagDBSchemaField
}{

	ID:             TagDBSchemaField("id"),
	CreatedAt:      TagDBSchemaField("created_at"),
	UpdatedAt:      TagDBSchemaField("updated_at"),
	Name:           TagDBSchemaField("name"),
	Aliases:        TagDBSchemaField("aliases"),
	Disabled:       TagDBSchemaField("disabled"),
	DisabledReason: TagDBSchemaField("disabled_reason"),
	DisabledAt:     TagDBSchemaField("disabled_at"),
	DisabledBy:     TagDBSchemaField("disabled_by"),
}

TagDBSchema stores db field names of Tag

Functions

This section is empty.

Types

type Tag

type Tag struct {
	ID             int64          `gorm:"primarykey; comment:ID"`
	CreatedAt      time.Time      `gorm:"not null; comment:创建时间"`
	UpdatedAt      time.Time      `gorm:"not null; comment:更新时间"`
	Name           string         `gorm:"not null; index; comment:名称"`
	Aliases        pq.StringArray `gorm:"type:text[]; index; comment:别名"`
	Disabled       bool           `gorm:"not null; index; comment:是否禁用"`
	DisabledReason *string        `gorm:"comment:禁用理由"`
	DisabledAt     *time.Time     `gorm:"comment:禁用时间"`
	DisabledBy     *int64         `gorm:"comment:禁用操作人"`
}

gen:qs 标签

func (*Tag) Create

func (o *Tag) Create(db *gorm.DB) error

Create is an autogenerated method nolint: dupl

func (*Tag) Delete

func (o *Tag) Delete(db *gorm.DB) error

Delete is an autogenerated method nolint: dupl

func (*Tag) TableName

func (p *Tag) TableName() string

func (*Tag) Update

func (o *Tag) Update(db *gorm.DB, fields ...TagDBSchemaField) error

Update updates Tag fields by primary key nolint: dupl

type TagDBSchemaField

type TagDBSchemaField string

TagDBSchemaField describes database schema field. It requires for method 'Update'

func (TagDBSchemaField) String

func (f TagDBSchemaField) String() string

String method returns string representation of field. nolint: dupl

type TagQuerySet

type TagQuerySet struct {
	// contains filtered or unexported fields
}

TagQuerySet is an queryset type for Tag

func NewTagQuerySet

func NewTagQuerySet(db *gorm.DB) TagQuerySet

NewTagQuerySet constructs new TagQuerySet

func (TagQuerySet) AliasesEq

func (qs TagQuerySet) AliasesEq(aliases pq.StringArray) TagQuerySet

AliasesEq is an autogenerated method nolint: dupl

func (TagQuerySet) AliasesIn

func (qs TagQuerySet) AliasesIn(aliases ...pq.StringArray) TagQuerySet

AliasesIn is an autogenerated method nolint: dupl

func (TagQuerySet) AliasesNe

func (qs TagQuerySet) AliasesNe(aliases pq.StringArray) TagQuerySet

AliasesNe is an autogenerated method nolint: dupl

func (TagQuerySet) AliasesNotIn

func (qs TagQuerySet) AliasesNotIn(aliases ...pq.StringArray) TagQuerySet

AliasesNotIn is an autogenerated method nolint: dupl

func (TagQuerySet) All

func (qs TagQuerySet) All(ret *[]*Tag) error

All is an autogenerated method nolint: dupl

func (TagQuerySet) Count

func (qs TagQuerySet) Count() (int64, error)

Count is an autogenerated method nolint: dupl

func (TagQuerySet) CreatedAtEq

func (qs TagQuerySet) CreatedAtEq(createdAt time.Time) TagQuerySet

CreatedAtEq is an autogenerated method nolint: dupl

func (TagQuerySet) CreatedAtGt

func (qs TagQuerySet) CreatedAtGt(createdAt time.Time) TagQuerySet

CreatedAtGt is an autogenerated method nolint: dupl

func (TagQuerySet) CreatedAtGte

func (qs TagQuerySet) CreatedAtGte(createdAt time.Time) TagQuerySet

CreatedAtGte is an autogenerated method nolint: dupl

func (TagQuerySet) CreatedAtLt

func (qs TagQuerySet) CreatedAtLt(createdAt time.Time) TagQuerySet

CreatedAtLt is an autogenerated method nolint: dupl

func (TagQuerySet) CreatedAtLte

func (qs TagQuerySet) CreatedAtLte(createdAt time.Time) TagQuerySet

CreatedAtLte is an autogenerated method nolint: dupl

func (TagQuerySet) CreatedAtNe

func (qs TagQuerySet) CreatedAtNe(createdAt time.Time) TagQuerySet

CreatedAtNe is an autogenerated method nolint: dupl

func (TagQuerySet) Delete

func (qs TagQuerySet) Delete() error

Delete is an autogenerated method nolint: dupl

func (TagQuerySet) DeleteNum

func (qs TagQuerySet) DeleteNum() (int64, error)

DeleteNum is an autogenerated method nolint: dupl

func (TagQuerySet) DeleteNumUnscoped

func (qs TagQuerySet) DeleteNumUnscoped() (int64, error)

DeleteNumUnscoped is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledAtEq

func (qs TagQuerySet) DisabledAtEq(disabledAt time.Time) TagQuerySet

DisabledAtEq is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledAtEqP

func (qs TagQuerySet) DisabledAtEqP(disabledAt *time.Time) TagQuerySet

DisabledAtEqP is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledAtGt

func (qs TagQuerySet) DisabledAtGt(disabledAt time.Time) TagQuerySet

DisabledAtGt is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledAtGte

func (qs TagQuerySet) DisabledAtGte(disabledAt time.Time) TagQuerySet

DisabledAtGte is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledAtIsNotNull

func (qs TagQuerySet) DisabledAtIsNotNull() TagQuerySet

DisabledAtIsNotNull is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledAtIsNull

func (qs TagQuerySet) DisabledAtIsNull() TagQuerySet

DisabledAtIsNull is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledAtLt

func (qs TagQuerySet) DisabledAtLt(disabledAt time.Time) TagQuerySet

DisabledAtLt is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledAtLte

func (qs TagQuerySet) DisabledAtLte(disabledAt time.Time) TagQuerySet

DisabledAtLte is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledAtNe

func (qs TagQuerySet) DisabledAtNe(disabledAt time.Time) TagQuerySet

DisabledAtNe is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledByEq

func (qs TagQuerySet) DisabledByEq(disabledBy int64) TagQuerySet

DisabledByEq is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledByEqP

func (qs TagQuerySet) DisabledByEqP(disabledBy *int64) TagQuerySet

DisabledByEqP is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledByGt

func (qs TagQuerySet) DisabledByGt(disabledBy int64) TagQuerySet

DisabledByGt is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledByGte

func (qs TagQuerySet) DisabledByGte(disabledBy int64) TagQuerySet

DisabledByGte is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledByIn

func (qs TagQuerySet) DisabledByIn(disabledBy ...int64) TagQuerySet

DisabledByIn is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledByIsNotNull

func (qs TagQuerySet) DisabledByIsNotNull() TagQuerySet

DisabledByIsNotNull is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledByIsNull

func (qs TagQuerySet) DisabledByIsNull() TagQuerySet

DisabledByIsNull is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledByLt

func (qs TagQuerySet) DisabledByLt(disabledBy int64) TagQuerySet

DisabledByLt is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledByLte

func (qs TagQuerySet) DisabledByLte(disabledBy int64) TagQuerySet

DisabledByLte is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledByNe

func (qs TagQuerySet) DisabledByNe(disabledBy int64) TagQuerySet

DisabledByNe is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledByNotIn

func (qs TagQuerySet) DisabledByNotIn(disabledBy ...int64) TagQuerySet

DisabledByNotIn is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledEq

func (qs TagQuerySet) DisabledEq(disabled bool) TagQuerySet

DisabledEq is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledIn

func (qs TagQuerySet) DisabledIn(disabled ...bool) TagQuerySet

DisabledIn is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledNe

func (qs TagQuerySet) DisabledNe(disabled bool) TagQuerySet

DisabledNe is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledNotIn

func (qs TagQuerySet) DisabledNotIn(disabled ...bool) TagQuerySet

DisabledNotIn is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledReasonEq

func (qs TagQuerySet) DisabledReasonEq(disabledReason string) TagQuerySet

DisabledReasonEq is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledReasonEqP

func (qs TagQuerySet) DisabledReasonEqP(disabledReason *string) TagQuerySet

DisabledReasonEqP is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledReasonGt

func (qs TagQuerySet) DisabledReasonGt(disabledReason string) TagQuerySet

DisabledReasonGt is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledReasonGte

func (qs TagQuerySet) DisabledReasonGte(disabledReason string) TagQuerySet

DisabledReasonGte is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledReasonIn

func (qs TagQuerySet) DisabledReasonIn(disabledReason ...string) TagQuerySet

DisabledReasonIn is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledReasonIsNotNull

func (qs TagQuerySet) DisabledReasonIsNotNull() TagQuerySet

DisabledReasonIsNotNull is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledReasonIsNull

func (qs TagQuerySet) DisabledReasonIsNull() TagQuerySet

DisabledReasonIsNull is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledReasonLike

func (qs TagQuerySet) DisabledReasonLike(disabledReason string) TagQuerySet

DisabledReasonLike is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledReasonLt

func (qs TagQuerySet) DisabledReasonLt(disabledReason string) TagQuerySet

DisabledReasonLt is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledReasonLte

func (qs TagQuerySet) DisabledReasonLte(disabledReason string) TagQuerySet

DisabledReasonLte is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledReasonNe

func (qs TagQuerySet) DisabledReasonNe(disabledReason string) TagQuerySet

DisabledReasonNe is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledReasonNotIn

func (qs TagQuerySet) DisabledReasonNotIn(disabledReason ...string) TagQuerySet

DisabledReasonNotIn is an autogenerated method nolint: dupl

func (TagQuerySet) DisabledReasonNotlike

func (qs TagQuerySet) DisabledReasonNotlike(disabledReason string) TagQuerySet

DisabledReasonNotlike is an autogenerated method nolint: dupl

func (TagQuerySet) GetDB

func (qs TagQuerySet) GetDB() *gorm.DB

GetDB is an autogenerated method nolint: dupl

func (TagQuerySet) GetUpdater

func (qs TagQuerySet) GetUpdater() TagUpdater

GetUpdater is an autogenerated method nolint: dupl

func (TagQuerySet) IDEq

func (qs TagQuerySet) IDEq(ID int64) TagQuerySet

IDEq is an autogenerated method nolint: dupl

func (TagQuerySet) IDGt

func (qs TagQuerySet) IDGt(ID int64) TagQuerySet

IDGt is an autogenerated method nolint: dupl

func (TagQuerySet) IDGte

func (qs TagQuerySet) IDGte(ID int64) TagQuerySet

IDGte is an autogenerated method nolint: dupl

func (TagQuerySet) IDIn

func (qs TagQuerySet) IDIn(ID ...int64) TagQuerySet

IDIn is an autogenerated method nolint: dupl

func (TagQuerySet) IDLt

func (qs TagQuerySet) IDLt(ID int64) TagQuerySet

IDLt is an autogenerated method nolint: dupl

func (TagQuerySet) IDLte

func (qs TagQuerySet) IDLte(ID int64) TagQuerySet

IDLte is an autogenerated method nolint: dupl

func (TagQuerySet) IDNe

func (qs TagQuerySet) IDNe(ID int64) TagQuerySet

IDNe is an autogenerated method nolint: dupl

func (TagQuerySet) IDNotIn

func (qs TagQuerySet) IDNotIn(ID ...int64) TagQuerySet

IDNotIn is an autogenerated method nolint: dupl

func (TagQuerySet) Limit

func (qs TagQuerySet) Limit(limit int) TagQuerySet

Limit is an autogenerated method nolint: dupl

func (TagQuerySet) NameEq

func (qs TagQuerySet) NameEq(name string) TagQuerySet

NameEq is an autogenerated method nolint: dupl

func (TagQuerySet) NameGt

func (qs TagQuerySet) NameGt(name string) TagQuerySet

NameGt is an autogenerated method nolint: dupl

func (TagQuerySet) NameGte

func (qs TagQuerySet) NameGte(name string) TagQuerySet

NameGte is an autogenerated method nolint: dupl

func (TagQuerySet) NameIn

func (qs TagQuerySet) NameIn(name ...string) TagQuerySet

NameIn is an autogenerated method nolint: dupl

func (TagQuerySet) NameLike

func (qs TagQuerySet) NameLike(name string) TagQuerySet

NameLike is an autogenerated method nolint: dupl

func (TagQuerySet) NameLt

func (qs TagQuerySet) NameLt(name string) TagQuerySet

NameLt is an autogenerated method nolint: dupl

func (TagQuerySet) NameLte

func (qs TagQuerySet) NameLte(name string) TagQuerySet

NameLte is an autogenerated method nolint: dupl

func (TagQuerySet) NameNe

func (qs TagQuerySet) NameNe(name string) TagQuerySet

NameNe is an autogenerated method nolint: dupl

func (TagQuerySet) NameNotIn

func (qs TagQuerySet) NameNotIn(name ...string) TagQuerySet

NameNotIn is an autogenerated method nolint: dupl

func (TagQuerySet) NameNotlike

func (qs TagQuerySet) NameNotlike(name string) TagQuerySet

NameNotlike is an autogenerated method nolint: dupl

func (TagQuerySet) Offset

func (qs TagQuerySet) Offset(offset int) TagQuerySet

Offset is an autogenerated method nolint: dupl

func (TagQuerySet) One

func (qs TagQuerySet) One(ret *Tag) error

One is used to retrieve one result. It returns gorm.ErrRecordNotFound if nothing was fetched

func (TagQuerySet) OrderAscByAliases

func (qs TagQuerySet) OrderAscByAliases() TagQuerySet

OrderAscByAliases is an autogenerated method nolint: dupl

func (TagQuerySet) OrderAscByCreatedAt

func (qs TagQuerySet) OrderAscByCreatedAt() TagQuerySet

OrderAscByCreatedAt is an autogenerated method nolint: dupl

func (TagQuerySet) OrderAscByDisabled

func (qs TagQuerySet) OrderAscByDisabled() TagQuerySet

OrderAscByDisabled is an autogenerated method nolint: dupl

func (TagQuerySet) OrderAscByDisabledAt

func (qs TagQuerySet) OrderAscByDisabledAt() TagQuerySet

OrderAscByDisabledAt is an autogenerated method nolint: dupl

func (TagQuerySet) OrderAscByDisabledBy

func (qs TagQuerySet) OrderAscByDisabledBy() TagQuerySet

OrderAscByDisabledBy is an autogenerated method nolint: dupl

func (TagQuerySet) OrderAscByDisabledReason

func (qs TagQuerySet) OrderAscByDisabledReason() TagQuerySet

OrderAscByDisabledReason is an autogenerated method nolint: dupl

func (TagQuerySet) OrderAscByID

func (qs TagQuerySet) OrderAscByID() TagQuerySet

OrderAscByID is an autogenerated method nolint: dupl

func (TagQuerySet) OrderAscByName

func (qs TagQuerySet) OrderAscByName() TagQuerySet

OrderAscByName is an autogenerated method nolint: dupl

func (TagQuerySet) OrderAscByUpdatedAt

func (qs TagQuerySet) OrderAscByUpdatedAt() TagQuerySet

OrderAscByUpdatedAt is an autogenerated method nolint: dupl

func (TagQuerySet) OrderDescByAliases

func (qs TagQuerySet) OrderDescByAliases() TagQuerySet

OrderDescByAliases is an autogenerated method nolint: dupl

func (TagQuerySet) OrderDescByCreatedAt

func (qs TagQuerySet) OrderDescByCreatedAt() TagQuerySet

OrderDescByCreatedAt is an autogenerated method nolint: dupl

func (TagQuerySet) OrderDescByDisabled

func (qs TagQuerySet) OrderDescByDisabled() TagQuerySet

OrderDescByDisabled is an autogenerated method nolint: dupl

func (TagQuerySet) OrderDescByDisabledAt

func (qs TagQuerySet) OrderDescByDisabledAt() TagQuerySet

OrderDescByDisabledAt is an autogenerated method nolint: dupl

func (TagQuerySet) OrderDescByDisabledBy

func (qs TagQuerySet) OrderDescByDisabledBy() TagQuerySet

OrderDescByDisabledBy is an autogenerated method nolint: dupl

func (TagQuerySet) OrderDescByDisabledReason

func (qs TagQuerySet) OrderDescByDisabledReason() TagQuerySet

OrderDescByDisabledReason is an autogenerated method nolint: dupl

func (TagQuerySet) OrderDescByID

func (qs TagQuerySet) OrderDescByID() TagQuerySet

OrderDescByID is an autogenerated method nolint: dupl

func (TagQuerySet) OrderDescByName

func (qs TagQuerySet) OrderDescByName() TagQuerySet

OrderDescByName is an autogenerated method nolint: dupl

func (TagQuerySet) OrderDescByUpdatedAt

func (qs TagQuerySet) OrderDescByUpdatedAt() TagQuerySet

OrderDescByUpdatedAt is an autogenerated method nolint: dupl

func (TagQuerySet) Select

func (qs TagQuerySet) Select(fields ...TagDBSchemaField) TagQuerySet

func (TagQuerySet) UpdatedAtEq

func (qs TagQuerySet) UpdatedAtEq(updatedAt time.Time) TagQuerySet

UpdatedAtEq is an autogenerated method nolint: dupl

func (TagQuerySet) UpdatedAtGt

func (qs TagQuerySet) UpdatedAtGt(updatedAt time.Time) TagQuerySet

UpdatedAtGt is an autogenerated method nolint: dupl

func (TagQuerySet) UpdatedAtGte

func (qs TagQuerySet) UpdatedAtGte(updatedAt time.Time) TagQuerySet

UpdatedAtGte is an autogenerated method nolint: dupl

func (TagQuerySet) UpdatedAtLt

func (qs TagQuerySet) UpdatedAtLt(updatedAt time.Time) TagQuerySet

UpdatedAtLt is an autogenerated method nolint: dupl

func (TagQuerySet) UpdatedAtLte

func (qs TagQuerySet) UpdatedAtLte(updatedAt time.Time) TagQuerySet

UpdatedAtLte is an autogenerated method nolint: dupl

func (TagQuerySet) UpdatedAtNe

func (qs TagQuerySet) UpdatedAtNe(updatedAt time.Time) TagQuerySet

UpdatedAtNe is an autogenerated method nolint: dupl

type TagUpdater

type TagUpdater struct {
	// contains filtered or unexported fields
}

TagUpdater is an Tag updates manager

func NewTagUpdater

func NewTagUpdater(db *gorm.DB) TagUpdater

NewTagUpdater creates new Tag updater nolint: dupl

func (TagUpdater) SetAliases

func (u TagUpdater) SetAliases(aliases pq.StringArray) TagUpdater

SetAliases is an autogenerated method nolint: dupl

func (TagUpdater) SetCreatedAt

func (u TagUpdater) SetCreatedAt(createdAt time.Time) TagUpdater

SetCreatedAt is an autogenerated method nolint: dupl

func (TagUpdater) SetDisabled

func (u TagUpdater) SetDisabled(disabled bool) TagUpdater

SetDisabled is an autogenerated method nolint: dupl

func (TagUpdater) SetDisabledAt

func (u TagUpdater) SetDisabledAt(disabledAt *time.Time) TagUpdater

SetDisabledAt is an autogenerated method nolint: dupl

func (TagUpdater) SetDisabledBy

func (u TagUpdater) SetDisabledBy(disabledBy *int64) TagUpdater

SetDisabledBy is an autogenerated method nolint: dupl

func (TagUpdater) SetDisabledReason

func (u TagUpdater) SetDisabledReason(disabledReason *string) TagUpdater

SetDisabledReason is an autogenerated method nolint: dupl

func (TagUpdater) SetID

func (u TagUpdater) SetID(ID int64) TagUpdater

SetID is an autogenerated method nolint: dupl

func (TagUpdater) SetName

func (u TagUpdater) SetName(name string) TagUpdater

SetName is an autogenerated method nolint: dupl

func (TagUpdater) SetUpdatedAt

func (u TagUpdater) SetUpdatedAt(updatedAt time.Time) TagUpdater

SetUpdatedAt is an autogenerated method nolint: dupl

func (TagUpdater) Update

func (u TagUpdater) Update() error

Update is an autogenerated method nolint: dupl

func (TagUpdater) UpdateNum

func (u TagUpdater) UpdateNum() (int64, error)

UpdateNum is an autogenerated method nolint: dupl

Directories

Path Synopsis
cmd
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL