123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- package orm
- import (
- "fmt"
- "strings"
- "github.com/huandu/go-sqlbuilder"
- )
- var SqlFlavor = sqlbuilder.MySQL
- type SqlType uint8
- const (
- Select SqlType = iota << 1
- Update
- Insert
- Delete
- )
- type selectBuilder struct {
- *sqlbuilder.SelectBuilder
- }
- /*type selectBuilder struct {
- b sqlbuilder.Builder
- }
- type selectBuilder struct {
- b sqlbuilder.Builder
- }
- type selectBuilder struct {
- b sqlbuilder.Builder
- }*/
- func getSelectBuilder(tbl *table) *selectBuilder {
- return &selectBuilder{
- sqlbuilder.NewSelectBuilder().From(tbl.getNameAs(true)),
- }
- }
- func (sb *selectBuilder) _select(tbls ...*table) *selectBuilder {
- cols := []string{}
- for _, tbl := range tbls {
- for _, col := range tbl.getColumns() {
- cols = append(cols, col.getName(true, tbl))
- }
- }
- sb.Select(cols...)
- return sb
- }
- func (sb *selectBuilder) _where(tbl *table, i MappableInterface) *selectBuilder {
- tmp := tbl.Make()
- where := []string{}
- outerloop:
- for _, col := range tbl.getColumns() {
- fn := "Get" + strings.Title(col.getFieldName())
- val, err := tbl.CallMethod(i, fn)
- if err == nil {
- tmpv, _ := tbl.CallMethod(tmp, fn)
- for i, v := range val {
- if v == tmpv[i] {
- continue outerloop
- }
- }
- where = append(where, sb.Equal(col.getName(true, tbl), val[0]))
- } else {
- fmt.Println(err)
- }
- }
- sb.Where(where...)
- return sb
- }
- func (sb *selectBuilder) _wherePrimaryOrElse(tbl *table, i MappableInterface) *selectBuilder {
- if pk := tbl.getPrimaryKey(); pk != nil {
- val, err := tbl.CallMethod(i, "Get"+strings.Title(pk.getFieldName()))
- if err != nil {
- sb._where(tbl, i)
- } else {
- sb.Where(sb.Equal(pk.getName(true, tbl), val[0]))
- }
- } else {
- sb._where(tbl, i)
- }
- return sb
- }
- func (sb *selectBuilder) _join(tbl *table, rel relation, opt ...sqlbuilder.JoinOption) *selectBuilder {
- if len(opt) == 0 {
- sb.Join(rel.getNameAs(true), sb.Equal(rel.on.getName(true, rel.table), sqlbuilder.Raw(rel.key.getName(true, tbl))))
- } else {
- sb.JoinWithOption(opt[0], rel.getNameAs(true), sb.Equal(rel.on.getName(true, rel.table), sqlbuilder.Raw(rel.key.getName(true, tbl))))
- }
- return sb
- }
|