diff --git a/README.md b/README.md index 8a209823..da55878e 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,11 @@ Drivers for Go's sql package which currently support database/sql includes: # Changelog +* **v0.6.2** + * refactor tag parse methods + * add Scan features to Get + * add QueryString method + * **v0.6.0** * 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` @@ -111,19 +116,21 @@ type User struct { 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 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 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 affected, err := engine.Insert(&user) diff --git a/README_CN.md b/README_CN.md index f4c7e219..40f5f600 100644 --- a/README_CN.md +++ b/README_CN.md @@ -54,6 +54,11 @@ xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作 ## 更新日志 +* **v0.6.2** + * 重构Tag解析方式 + * Get方法新增类似Sacn的特性 + * 新增 QueryString 方法 + * **v0.6.0** * 去除对 ql 的支持 * 新增条件查询分析器 [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)) ``` -* 最原始的也支持SQL语句查询,返回的结果类型为 []map[string][]byte +* `Query` 最原始的也支持SQL语句查询,返回的结果类型为 []map[string][]byte。`QueryString` 返回 []map[string]string ```Go results, err := engine.Query("select * from user") + +results, err := engine.QueryString("select * from user") ``` -* 执行一个SQL语句 +* `Exec` 执行一个SQL语句 ```Go affected, err := engine.Exec("update user set age = ? where name = ?", age, name) diff --git a/VERSION b/VERSION deleted file mode 100644 index 22c1aa4d..00000000 --- a/VERSION +++ /dev/null @@ -1 +0,0 @@ -xorm v0.6.0.1022 \ No newline at end of file diff --git a/engine.go b/engine.go index 134e6b14..54ed387c 100644 --- a/engine.go +++ b/engine.go @@ -1340,6 +1340,13 @@ func (engine *Engine) Query(sql string, paramStr ...interface{}) (resultsSlice [ 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 func (engine *Engine) Insert(beans ...interface{}) (int64, error) { session := engine.NewSession() diff --git a/session_raw.go b/session_raw.go index 9351d5cf..587addef 100644 --- a/session_raw.go +++ b/session_raw.go @@ -70,7 +70,7 @@ func (session *Session) innerQuery2(sqlStr string, params ...interface{}) ([]map 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) { defer session.resetStatement() if session.IsAutoClose { @@ -80,6 +80,15 @@ func (session *Session) Query(sqlStr string, paramStr ...interface{}) (resultsSl 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 // ============================= diff --git a/session_raw_test.go b/session_raw_test.go new file mode 100644 index 00000000..126f617f --- /dev/null +++ b/session_raw_test.go @@ -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"]) +}