add query slice string
This commit is contained in:
parent
3e8290cc94
commit
59ca7f0f95
|
@ -182,6 +182,23 @@ func rows2Strings(rows *core.Rows) (resultsSlice []map[string]string, err error)
|
||||||
return resultsSlice, nil
|
return resultsSlice, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func rows2SliceString(rows *core.Rows) (resultsSlice [][]string, err error) {
|
||||||
|
fields, err := rows.Columns()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for rows.Next() {
|
||||||
|
record := make([]string, len(fields), len(fields))
|
||||||
|
err = rows.ScanSlice(&record)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
resultsSlice = append(resultsSlice, record)
|
||||||
|
}
|
||||||
|
|
||||||
|
return resultsSlice, nil
|
||||||
|
}
|
||||||
|
|
||||||
// QueryString runs a raw sql and return records as []map[string]string
|
// QueryString runs a raw sql and return records as []map[string]string
|
||||||
func (session *Session) QueryString(sqlorArgs ...interface{}) ([]map[string]string, error) {
|
func (session *Session) QueryString(sqlorArgs ...interface{}) ([]map[string]string, error) {
|
||||||
if session.isAutoClose {
|
if session.isAutoClose {
|
||||||
|
@ -202,6 +219,26 @@ func (session *Session) QueryString(sqlorArgs ...interface{}) ([]map[string]stri
|
||||||
return rows2Strings(rows)
|
return rows2Strings(rows)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// QuerySliceString runs a raw sql and return records as [][]string
|
||||||
|
func (session *Session) QuerySliceString(sqlorArgs ...interface{}) ([][]string, error) {
|
||||||
|
if session.isAutoClose {
|
||||||
|
defer session.Close()
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlStr, args, err := session.genQuerySQL(sqlorArgs...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
rows, err := session.queryRows(sqlStr, args...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
|
||||||
|
return rows2SliceString(rows)
|
||||||
|
}
|
||||||
|
|
||||||
func row2mapInterface(rows *core.Rows, fields []string) (resultsMap map[string]interface{}, err error) {
|
func row2mapInterface(rows *core.Rows, fields []string) (resultsMap map[string]interface{}, err error) {
|
||||||
resultsMap = make(map[string]interface{}, len(fields))
|
resultsMap = make(map[string]interface{}, len(fields))
|
||||||
scanResultContainers := make([]interface{}, len(fields))
|
scanResultContainers := make([]interface{}, len(fields))
|
||||||
|
|
|
@ -224,6 +224,43 @@ func TestQueryStringNoParam(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestQuerySliceStringNoParam(t *testing.T) {
|
||||||
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
||||||
|
type GetVar6 struct {
|
||||||
|
Id int64 `xorm:"autoincr pk"`
|
||||||
|
Msg bool `xorm:"bit"`
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.NoError(t, testEngine.Sync2(new(GetVar6)))
|
||||||
|
|
||||||
|
var data = GetVar6{
|
||||||
|
Msg: false,
|
||||||
|
}
|
||||||
|
_, err := testEngine.Insert(data)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
records, err := testEngine.Table("get_var6").Limit(1).QuerySliceString()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 1, len(records))
|
||||||
|
assert.EqualValues(t, "1", records[0][0])
|
||||||
|
if testEngine.Dialect().URI().DbType == core.POSTGRES {
|
||||||
|
assert.EqualValues(t, "false", records[0][1])
|
||||||
|
} else {
|
||||||
|
assert.EqualValues(t, "0", records[0][1])
|
||||||
|
}
|
||||||
|
|
||||||
|
records, err = testEngine.Table("get_var6").Where(builder.Eq{"id": 1}).QuerySliceString()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 1, len(records))
|
||||||
|
assert.EqualValues(t, "1", records[0][0])
|
||||||
|
if testEngine.Dialect().URI().DbType == core.POSTGRES {
|
||||||
|
assert.EqualValues(t, "false", records[0][1])
|
||||||
|
} else {
|
||||||
|
assert.EqualValues(t, "0", records[0][1])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestQueryInterfaceNoParam(t *testing.T) {
|
func TestQueryInterfaceNoParam(t *testing.T) {
|
||||||
assert.NoError(t, prepareEngine())
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue