add QueryString support
This commit is contained in:
parent
5ebae720bd
commit
5497f76c84
13
README.md
13
README.md
|
@ -50,6 +50,11 @@ Drivers for Go's sql package which currently support database/sql includes:
|
||||||
|
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
* **v0.6.2**
|
||||||
|
* refactor tag parse methods
|
||||||
|
* add Scan features to Get
|
||||||
|
* add QueryString method
|
||||||
|
|
||||||
* **v0.6.0**
|
* **v0.6.0**
|
||||||
* remove support for ql
|
* remove support for ql
|
||||||
* add query condition builder support via [github.com/go-xorm/builder](https://github.com/go-xorm/builder), so `Where`, `And`, `Or`
|
* add query condition builder support via [github.com/go-xorm/builder](https://github.com/go-xorm/builder), so `Where`, `And`, `Or`
|
||||||
|
@ -111,19 +116,21 @@ type User struct {
|
||||||
err := engine.Sync2(new(User))
|
err := engine.Sync2(new(User))
|
||||||
```
|
```
|
||||||
|
|
||||||
* Query a SQL string, the returned results is []map[string][]byte
|
* `Query` runs a SQL string, the returned results is `[]map[string][]byte`, `QueryString` returns `[]map[string]string`.
|
||||||
|
|
||||||
```Go
|
```Go
|
||||||
results, err := engine.Query("select * from user")
|
results, err := engine.Query("select * from user")
|
||||||
|
|
||||||
|
results, err := engine.QueryString("select * from user")
|
||||||
```
|
```
|
||||||
|
|
||||||
* Execute a SQL string, the returned results
|
* `Execute` runs a SQL string, it returns `affetcted` and `error`
|
||||||
|
|
||||||
```Go
|
```Go
|
||||||
affected, err := engine.Exec("update user set age = ? where name = ?", age, name)
|
affected, err := engine.Exec("update user set age = ? where name = ?", age, name)
|
||||||
```
|
```
|
||||||
|
|
||||||
* Insert one or multiple records to database
|
* `Insert` one or multiple records to database
|
||||||
|
|
||||||
```Go
|
```Go
|
||||||
affected, err := engine.Insert(&user)
|
affected, err := engine.Insert(&user)
|
||||||
|
|
11
README_CN.md
11
README_CN.md
|
@ -54,6 +54,11 @@ xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作
|
||||||
|
|
||||||
## 更新日志
|
## 更新日志
|
||||||
|
|
||||||
|
* **v0.6.2**
|
||||||
|
* 重构Tag解析方式
|
||||||
|
* Get方法新增类似Sacn的特性
|
||||||
|
* 新增 QueryString 方法
|
||||||
|
|
||||||
* **v0.6.0**
|
* **v0.6.0**
|
||||||
* 去除对 ql 的支持
|
* 去除对 ql 的支持
|
||||||
* 新增条件查询分析器 [github.com/go-xorm/builder](https://github.com/go-xorm/builder), 从因此 `Where, And, Or` 函数
|
* 新增条件查询分析器 [github.com/go-xorm/builder](https://github.com/go-xorm/builder), 从因此 `Where, And, Or` 函数
|
||||||
|
@ -115,13 +120,15 @@ type User struct {
|
||||||
err := engine.Sync2(new(User))
|
err := engine.Sync2(new(User))
|
||||||
```
|
```
|
||||||
|
|
||||||
* 最原始的也支持SQL语句查询,返回的结果类型为 []map[string][]byte
|
* `Query` 最原始的也支持SQL语句查询,返回的结果类型为 []map[string][]byte。`QueryString` 返回 []map[string]string
|
||||||
|
|
||||||
```Go
|
```Go
|
||||||
results, err := engine.Query("select * from user")
|
results, err := engine.Query("select * from user")
|
||||||
|
|
||||||
|
results, err := engine.QueryString("select * from user")
|
||||||
```
|
```
|
||||||
|
|
||||||
* 执行一个SQL语句
|
* `Exec` 执行一个SQL语句
|
||||||
|
|
||||||
```Go
|
```Go
|
||||||
affected, err := engine.Exec("update user set age = ? where name = ?", age, name)
|
affected, err := engine.Exec("update user set age = ? where name = ?", age, name)
|
||||||
|
|
|
@ -1340,6 +1340,13 @@ func (engine *Engine) Query(sql string, paramStr ...interface{}) (resultsSlice [
|
||||||
return session.Query(sql, paramStr...)
|
return session.Query(sql, paramStr...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// QueryString runs a raw sql and return records as []map[string]string
|
||||||
|
func (engine *Engine) QueryString(sqlStr string, args ...interface{}) ([]map[string]string, error) {
|
||||||
|
session := engine.NewSession()
|
||||||
|
defer session.Close()
|
||||||
|
return session.QueryString(sqlStr, args...)
|
||||||
|
}
|
||||||
|
|
||||||
// Insert one or more records
|
// Insert one or more records
|
||||||
func (engine *Engine) Insert(beans ...interface{}) (int64, error) {
|
func (engine *Engine) Insert(beans ...interface{}) (int64, error) {
|
||||||
session := engine.NewSession()
|
session := engine.NewSession()
|
||||||
|
|
|
@ -70,7 +70,7 @@ func (session *Session) innerQuery2(sqlStr string, params ...interface{}) ([]map
|
||||||
return rows2maps(rows)
|
return rows2maps(rows)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Query a raw sql and return records as []map[string][]byte
|
// Query runs a raw sql and return records as []map[string][]byte
|
||||||
func (session *Session) Query(sqlStr string, paramStr ...interface{}) (resultsSlice []map[string][]byte, err error) {
|
func (session *Session) Query(sqlStr string, paramStr ...interface{}) (resultsSlice []map[string][]byte, err error) {
|
||||||
defer session.resetStatement()
|
defer session.resetStatement()
|
||||||
if session.IsAutoClose {
|
if session.IsAutoClose {
|
||||||
|
@ -80,6 +80,15 @@ func (session *Session) Query(sqlStr string, paramStr ...interface{}) (resultsSl
|
||||||
return session.query(sqlStr, paramStr...)
|
return session.query(sqlStr, paramStr...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// QueryString runs a raw sql and return records as []map[string]string
|
||||||
|
func (session *Session) QueryString(sqlStr string, args ...interface{}) ([]map[string]string, error) {
|
||||||
|
defer session.resetStatement()
|
||||||
|
if session.IsAutoClose {
|
||||||
|
defer session.Close()
|
||||||
|
}
|
||||||
|
return session.query2(sqlStr, args...)
|
||||||
|
}
|
||||||
|
|
||||||
// =============================
|
// =============================
|
||||||
// for string
|
// for string
|
||||||
// =============================
|
// =============================
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
// Copyright 2017 The Xorm Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package xorm
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestQueryString(t *testing.T) {
|
||||||
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
||||||
|
type GetVar struct {
|
||||||
|
Id int64 `xorm:"autoincr pk"`
|
||||||
|
Msg string `xorm:"varchar(255)"`
|
||||||
|
Age int
|
||||||
|
Money float32
|
||||||
|
Created time.Time `xorm:"created"`
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.NoError(t, testEngine.Sync2(new(GetVar)))
|
||||||
|
|
||||||
|
var data = GetVar{
|
||||||
|
Msg: "hi",
|
||||||
|
Age: 28,
|
||||||
|
Money: 1.5,
|
||||||
|
}
|
||||||
|
_, err := testEngine.InsertOne(data)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
records, err := testEngine.QueryString("select * from get_var")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, 1, len(records))
|
||||||
|
assert.Equal(t, 5, len(records[0]))
|
||||||
|
assert.Equal(t, "1", records[0]["id"])
|
||||||
|
assert.Equal(t, "hi", records[0]["msg"])
|
||||||
|
assert.Equal(t, "28", records[0]["age"])
|
||||||
|
assert.Equal(t, "1.5", records[0]["money"])
|
||||||
|
}
|
Loading…
Reference in New Issue