GithubHelp home page GithubHelp logo

issue9 / orm Goto Github PK

View Code? Open in Web Editor NEW
11.0 3.0 6.0 1.58 MB

简单小巧的 orm

Home Page: https://issue9.github.io/orm/

License: MIT License

Go 100.00%
go golang orm database orm-library object-relational-mapper

orm's People

Contributors

8ugmak1r avatar caixw avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

orm's Issues

not enough arguments in call to orm.NewDB

db1,err := orm.NewDB("./db1", "prefix_", dialect.Sqlite3("sqlite3"))

test.go:13:21: not enough arguments in call to orm.NewDB
have (string, string, core.Dialect)
want (string, string, string, orm.Dialect)

db2.Query sql: converting argument $1 type: unsupported type []interface {}, a slice of interface panic: runtime error: invalid memory address or nil pointer dereference

参考文档中 [Query/Exec:] 部分的例子代码

package main

import (
	"fmt"
	"github.com/issue9/orm/v5" // sqlite3    dialect
	_ "github.com/issue9/orm/v5/core"
	"github.com/issue9/orm/v5/dialect"
	"github.com/issue9/orm/v5/fetch"
	_ "github.com/issue9/orm/v5/sqlbuilder"
	_ "github.com/mattn/go-sqlite3"
	_ "time"
	//"github.com/gorilla/sessions"
)

type User struct {
	Id   int64  `orm:"name(id);ai;"`
	Name string `orm:"name(name);`
}

func (c *User) TableName() string { return "User" }

func main() {
	db2, err := orm.NewDB("./orm.db", dialect.Sqlite3("sqlite3"))

db2.Create(&User{})

	fmt.Println(err)
	azer := &User{
		Name: "issue9",
	}

	ret, err := db2.Insert(azer)

	fmt.Println(ret, err)

	data := []*User{}
	sql := "select * from user where id >=?"
	rows, err := db2.Query(sql, []interface{}{1})  
	fmt.Println(rows, err)
	r, err := fetch.Object(true, rows, &data)
	fmt.Println(r, err)
	for k, v := range data {
		fmt.Println(k, v.Name)
	}
}

报错
sql: converting argument $1 type: unsupported type []interface {}, a slice of interface
panic: runtime error: invalid memory address or nil pointer dereference

	rows, err := db2.Query(sql, 1)   

返回有纪录 ,但是没有字段值

添加对数组的支持

采用 JSON 字符串保存数组;或是以特殊符号分隔的字符串保存,符号由 struct tag 中指定。

为bytes.Buffer建一个缓存池

目前需要通过频繁的创建bytes.Buffer来生成SQL语句。
通过sync.Pool管理bytes.Buffer,在性能上是否会有所提升!

添加对子对象的支持

比如查询以下语句:

select a.*, user.name as u.name, account.count as u.count from ...

导出到以下结构体

type Info struct {
    // 其它字段定义
    User *User `orm:"name(u)"`
}

type User struct {
    Name string `orm:"name(name)"`
    Account int `orm:"name(account)`
}

info := &info{}
sql.QueryObj(info)

查询出为的 info 对象,应该将查询语句的 u. 开头的字段自初始化 Info.User 中的对象。

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.