★ wanayoo — archive 1999 https://github.com/eehsiao/sqlbuilderNouvelle recherche | Portail wanayoo
Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 

README.md

sqlbuilder

sqlbuilder is a simple sql query string builder

sqlbuilder its recursive struct call, that you can easy to build sql string

GoDoc

simple example :

    b := sb.NewSQLBuilder("SQLite")
    b.Select("a", "b").
        From("tblA").
        Join("tblB").
        Where("a", "=", 1).
        Where("b", "=", "str").
        Limit(100).
        BuildSelectSQL()
    fmt.Println(b.BuildedSQL())

    b.Release()

more case can see test case

go-model

how to use sqlbuilder with go-model :

package db

import (
	"database/sql"
	"strconv"

	model "github.com/eehsiao/go-models"
	sb "github.com/eehsiao/sqlbuilder"
)

func (dao *Dao) GetExgs(params ...string) (e *[]*Exg, err error) {
	var (
		b    = sb.NewSQLBuilder("SQLite")
		rows *sql.Rows
	)
	e = &[]*Exg{}
	defer func() {
		if rows != nil {
			rows.Close()
		}
		b.Release()
		rows = nil
	}()

	b.Select(model.Inst2Fields(Exg{})...).
		From(TbExgs).
		Where("is_active", "=", 1)
	if len(params) > 0 && params[0] != "" {
		b.Where("exg_code", "=", params[0])
	}
	if len(params) > 1 && params[1] != "" {
		if i, err := strconv.Atoi(params[1]); err == nil && i > 0 {
			b.Limit(i)
		}
	}
	if rows, err = dao.Get(b); err == nil {
		for rows.Next() {
			exg := Exg{}
			if err = rows.Scan(model.Struct4Scan(&exg)...); err == nil {
				*e = append(*e, &exg)
			} else {
				return
			}
		}
	}
	return
}

func (dao *Dao) UpdateOrInsertExg(t *Exg) (r sql.Result, err error) {
	var (
		b          = sb.NewSQLBuilder("SQLite")
		cnt        int64
		withoutKey = []string{"id", "exg_code"}
	)
	defer func() {
		b.Release()
	}()

	b.Set(model.Inst2Set(*t, withoutKey...)).
		From(TbExgs).
		Where("exg_code", "=", t.ExgCode).
		BuildUpdateSQL()
	if r, err = dao.ExecBuilder(b); err == nil {
		if cnt, err = r.RowsAffected(); err == nil && cnt == 0 {
			b.Fields(model.Inst2FieldWithoutID(*t)...).
				Values(model.Inst2Values(*t, "id")...).
				Into(TbExgs).
				BuildInsertSQL()
			r, err = dao.ExecBuilder(b)
		}
	}

	return
}
You can’t perform that action at this time.