sql

package
v0.0.0-...-7429660 Latest Latest
Warning

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

Go to latest
Published: Apr 29, 2023 License: Apache-2.0 Imports: 21 Imported by: 1

README

go-orm库的封装

go-orm的文档在这里 http://jinzhu.me/gorm/crud.html#query

Documentation

Overview

sql为公司内部mysql client

Background

这个库封装了http://gorm.io/

Configure

rpc-go框架提供初始化全局GroupManager, 配置项如下:

[[database]]
	name="test1"
	master = "admin_user:ar46yJv34jfd@tcp(rm-2zej5vr9490158hv0.mysql.rds.aliyuncs.com)/live_serviceinfo?charset=utf8"
	slaves = ["admin_user:ar46yJv34jfd@tcp(rm-2zej5vr9490158hv0.mysql.rds.aliyuncs.com)/live_serviceinfo?charset=utf8"]
[[database]]
	name="test2"
	master = "admin_user:ar46yJv34jfd@tcp(rm-2zej5vr9490158hv0.mysql.rds.aliyuncs.com)/live_serviceinfo?charset=utf8"
	slaves = ["admin_user:ar46yJv34jfd@tcp(rm-2zej5vr9490158hv0.mysql.rds.aliyuncs.com)/live_serviceinfo?charset=utf8"]

框架初始化完之后,可以使用Get函数来获取Group:

g := sql.Get("test1")
if g == nil {
  log.Fatalf("group test1 is nil\n")
}

Index

Examples

Constants

This section is empty.

Variables

View Source
var (
	// SQLGroupManager 是GroupManager结构体的全局变量
	SQLGroupManager = newGroupManager()
)

Functions

func SetLoggerFunc

func SetLoggerFunc(print func(...interface{}))

SetLoggerFunc设置logger

Types

type Client

type Client struct {
	*gorm.DB
}

Client继承了*gorm.DB的所有方法, 详细的使用方法请参考: http://gorm.io/docs/connecting_to_the_database.html

Example
package main

import (
	log "github.com/yunfeiyang1916/toolkit/logging"
	"github.com/yunfeiyang1916/toolkit/sql"
)

func main() {
	g := sql.Get("group1")
	if g == nil {
		log.Fatalf("group is nil")
	}

	type TabConfigSql struct {
		Priority     float64 `gorm:"priority"`
		White_users  string  `gorm:"white_users"`
		Android_vers string  `gorm:"android_vers"`
		Ios_vers     string  `gorm:"ios_vers"`
		Locations    string  `gorm:"locations"`
		Tails        string  `gorm:"tails"`
		Between      string  `gorm:"between"`
		Tabs         string  `gorm:"tabs"`
		SubTabs      string  `gorm:"sub_tabs"`
	}

	var all []*TabConfigSql

	err := g.Instance(true).
		Table("tab_config").
		Where("id = 1").
		Order("priority desc").
		Find(&all).Error

	if err != nil {
		log.Fatalf("err=%+v\n", err)
	}
}
Output:

func PartitionBy

func PartitionBy(partiton func() (bool, string, string)) *Client

type GlobalLogger

type GlobalLogger struct {
	IsMaster  int
	Database  string
	StatLevel string
	LogFormat string
	// contains filtered or unexported fields
}

func (*GlobalLogger) Print

func (l *GlobalLogger) Print(message ...interface{})

type Group

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

func Get

func Get(name string) *Group

Get(name)等于SQLGroupManager.Get(name)

func NewGroup

func NewGroup(d SQLGroupConfig) (*Group, error)

NewGroup 初始化一个Group, 一个Group包含一个master实例和零个或多个slave实例

Example
package main

import (
	log "github.com/yunfeiyang1916/toolkit/logging"
	"github.com/yunfeiyang1916/toolkit/sql"
)

func main() {
	g, err := sql.NewGroup(sql.SQLGroupConfig{
		Name:   "db1",                                                         // database名称
		Master: "user:password@/dbname?charset=utf8&parseTime=True&loc=Local", // master
		Slaves: []string{
			"user:password@/dbname?charset=utf8&parseTime=True&loc=Local", // slaves
		},
	})

	if err != nil {
		log.Fatalf("new group error %v", err)
	}

	type AllServerPolicy struct {
		ServerName      string `gorm:"server_name"`
		ServerType      int    `gorm:"server_type"`
		ServerURL       string `gorm:"server_url"`
		SecureServerURL string `gorm:"secure_server_url"`
	}

	var all []*AllServerPolicy

	err = g.Master().Table("all_server_policy").Find(&all).Error
	if err != nil {
		log.Fatalf("query all error %v", err)
	}
}
Output:

func (*Group) Instance

func (g *Group) Instance(isMaster bool) *Client

Instance 函数如果isMaster是true, 返回master实例,否则返回slave实例

func (*Group) Master

func (g *Group) Master() *Client

Master 返回master实例

func (*Group) Slave

func (g *Group) Slave() *Client

Slave 返回一个slave实例,使用轮转算法

type GroupManager

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

GroupManager 提供了Add和Get操作, 用于管理Group

Example
package main

import (
	"os"

	log "github.com/yunfeiyang1916/toolkit/logging"
	"github.com/yunfeiyang1916/toolkit/sql"
	"github.com/yunfeiyang1916/toolkit/tomlconfig"
)

func main() {
	type groupConfig struct {
		Databases []sql.SQLGroupConfig `toml:"database"`
	}
	var gc groupConfig

	// sql_config.toml
	//	[[database]]
	//		name="test1"
	//		master = "admin_user:ar46yJv34jfd@tcp(rm-2zej5vr9490158hv0.mysql.rds.aliyuncs.com)/live_serviceinfo?charset=utf8"
	//		slaves = ["admin_user:ar46yJv34jfd@tcp(rm-2zej5vr9490158hv0.mysql.rds.aliyuncs.com)/live_serviceinfo?charset=utf8"]
	//
	//	[[database]]
	//		name="test2"
	//		master = "admin_user:ar46yJv34jfd@tcp(rm-2zej5vr9490158hv0.mysql.rds.aliyuncs.com)/live_serviceinfo?charset=utf8"
	//		slaves = ["admin_user:ar46yJv34jfd@tcp(rm-2zej5vr9490158hv0.mysql.rds.aliyuncs.com)/live_serviceinfo?charset=utf8"]

	err := tomlconfig.ParseTomlConfig("sql_config.toml", &gc)
	if err != nil {
		log.Fatalf("parse toml err %+v\n", err)
	}

	for _, d := range gc.Databases {
		g, err := sql.NewGroup(sql.SQLGroupConfig{
			Name:   d.Name,
			Master: d.Master,
			Slaves: d.Slaves,
		})
		if err != nil {
			log.Errorf("init group error %v", err)
			os.Exit(1)
		}
		err = sql.SQLGroupManager.Add(d.Name, g)
		if err != nil {
			log.Errorf("add group error %v", err)
			os.Exit(1)
		}
	}
}
Output:

func (*GroupManager) Add

func (gm *GroupManager) Add(name string, g *Group) error

func (*GroupManager) Get

func (gm *GroupManager) Get(name string) *Group

func (*GroupManager) PartitionBy

func (gm *GroupManager) PartitionBy(partiton func() (bool, string, string)) *Client

type SQLGroupConfig

type SQLGroupConfig struct {
	Name      string   `toml:"name"`
	Master    string   `toml:"master"`
	Slaves    []string `toml:"slaves"`
	StatLevel string   `toml:"stat_level"`
	LogFormat string   `toml:"log_format"`
}

type SqlInfo

type SqlInfo struct {
	FileWithLine string
	Duration     float64
	Sql          string
	Rows         int64
	RowsSimple   int64
	ErrorMsg     string

	Format string
}

func (*SqlInfo) Output

func (r *SqlInfo) Output() string

func (*SqlInfo) SetCustomFormat

func (r *SqlInfo) SetCustomFormat(format string)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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