2 Star 0 Fork 0

mirrors_TIBCOSoftware/go-oci8

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
sqlrows_test.go 2.18 KB
一键复制 编辑 原始数据 按行查看 历史
Chris Bandy 提交于 2015-05-26 01:38 +08:00 . Move tests into package
package oci8
import (
"database/sql"
"fmt"
)
type RowMap struct {
columns []string
byName map[string]int
values []interface{}
rows *sql.Rows
}
func NewS(r *sql.Rows, e error) (*RowMap, error) {
if e != nil {
return nil, e
}
rm := &RowMap{rows: r}
e = rm.init()
if e != nil {
return nil, e
}
return rm, nil
}
func (r *RowMap) Key(key string) interface{} {
if v, ok := r.Get(key); ok {
return v
}
return nil
}
func (r *RowMap) Get(key string) (interface{}, bool) {
if i, ok := r.byName[key]; ok {
return r.values[i], true
}
return nil, false
}
func (r *RowMap) Row() []interface{} {
return r.values
}
func (r *RowMap) Map() map[string]interface{} {
ret := make(map[string]interface{}, len(r.columns))
for i, v := range r.columns {
ret[v] = r.values[i]
}
return ret
}
func (r *RowMap) Next() bool {
return r.rows.Next()
}
func (r *RowMap) Err() error {
return r.rows.Err()
}
func (r *RowMap) Close() error {
r.values = r.values[:0]
r.columns = nil
r.byName = nil
return r.rows.Close()
}
func (r *RowMap) Init(rows *sql.Rows) error {
if r.columns != nil {
panic("must be closed first")
}
r.rows = rows
return r.init()
}
func (r *RowMap) init() error {
var err error
r.columns, err = r.rows.Columns()
if err != nil {
return err
}
delta := len(r.columns) - len(r.values)
if delta > 0 {
r.values = append(r.values, make([]interface{}, delta)...)
} else if delta < 0 {
r.values = r.values[:len(r.columns)]
}
r.byName = make(map[string]int, len(r.columns))
for i, key := range r.columns {
r.byName[key] = i
}
return nil
}
func (r *RowMap) Scan() error {
for i := range r.values {
r.values[i] = &r.values[i]
}
return r.rows.Scan(r.values...)
}
func (r *RowMap) Print() {
for i, v := range r.columns {
switch z := r.values[i].(type) {
case string:
if len(z) > 40 {
fmt.Printf("%s=[%d]%v...%v.\n", v, len(z), z[:10], z[len(z)-10:])
} else {
fmt.Printf("%s=[%d]%v.\n", v, len(z), z)
}
case []byte:
if len(z) > 40 {
fmt.Printf("%s=[%d]%v...%v.\n", v, len(z), z[:10], z[len(z)-10:])
} else {
fmt.Printf("%s=[%d]%v.\n", v, len(z), z)
}
default:
fmt.Printf("%s=%v.\n", v, r.values[i])
}
}
fmt.Println()
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/mirrors_TIBCOSoftware/go-oci8.git
git@gitee.com:mirrors_TIBCOSoftware/go-oci8.git
mirrors_TIBCOSoftware
go-oci8
go-oci8
master

搜索帮助