本文整理汇总了Golang中github.com/eaciit/toolkit.HasMember函数的典型用法代码示例。如果您正苦于以下问题:Golang HasMember函数的具体用法?Golang HasMember怎么用?Golang HasMember使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了HasMember函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: HasPartExec
func (q *Query) HasPartExec() error {
var e error
var lastJson []toolkit.M
q.ReadFile(&lastJson, q.Connection().(*Connection).filePath)
if toolkit.SliceLen(lastJson) > 0 {
getWhere := []*dbox.Filter{}
for _, v := range q.whereData {
getWhere = []*dbox.Filter{v}
i := dbox.Find(q.sliceData, getWhere)
for idSlice, _ := range q.sliceData {
if toolkit.HasMember(i, idSlice) {
idata := dbox.Find(lastJson, getWhere)
for idx, _ := range lastJson {
if toolkit.HasMember(idata, idx) {
lastJson[idx] = q.sliceData[idSlice]
}
}
if toolkit.SliceLen(idata) == 0 {
lastJson = append(lastJson, q.sliceData[idSlice])
// toolkit.Printf("idata>%v\n", q.sliceData[idSlice])
}
}
}
}
q.sliceData = lastJson
}
e = q.WriteFile(q.sliceData)
if e != nil {
return errorlib.Error(packageName, modQuery+".Exec", "HasPartExec", e.Error())
}
return nil
}
开发者ID:Budianto55,项目名称:dbox,代码行数:35,代码来源:json_query.go
示例2: MatchV
func MatchV(v interface{}, f *Filter) bool {
match := false
/*
rv0 := reflect.ValueOf(v)
if rv0.Kind() == reflect.Ptr {
rv0 = reflect.Indirect(rv0)
}
rv1 := reflect.ValueOf(f.Value)
if rv1.Kind()==reflect.Ptr{
rv1=reflect.Indirect(rv1)
}
*/
if toolkit.HasMember([]interface{}{FilterOpEqual, FilterOpNoEqual, FilterOpGt, FilterOpGte, FilterOpLt, FilterOpLte}, f.Op) {
return Compare(v, f.Value, f.Op)
} else if f.Op == FilterOpIn {
var values []interface{}
toolkit.FromBytes(toolkit.ToBytes(f.Value, ""), "", &values)
return toolkit.HasMember(values, v)
} else if f.Op == FilterOpNin {
var values []interface{}
toolkit.FromBytes(toolkit.ToBytes(f.Value, ""), "", &values)
return !toolkit.HasMember(values, v)
}
return match
}
开发者ID:haibudi,项目名称:dbox,代码行数:25,代码来源:dbox.go
示例3: DoFetchDataSourceMetaData
func (d *DataSourceController) DoFetchDataSourceMetaData(dataConn *colonycore.Connection, from string) (bool, []*colonycore.FieldInfo, error) {
if err := d.checkIfDriverIsSupported(dataConn.Driver); err != nil {
return false, nil, err
}
var conn dbox.IConnection
conn, err := helper.ConnectUsingDataConn(dataConn).Connect()
if err != nil {
return false, nil, err
}
defer conn.Close()
var query = conn.NewQuery().Take(1)
if !toolkit.HasMember([]string{"csv", "json"}, dataConn.Driver) {
query = query.From(from)
}
cursor, err := query.Cursor(nil)
if err != nil {
return false, nil, err
}
defer cursor.Close()
data := toolkit.M{}
var connDriver string
if dataConn.Driver == "jdbc" {
connDriver = strings.Split(dataConn.Settings.GetString("connector"), ":")[1]
} else {
connDriver = dataConn.Driver
}
if !toolkit.HasMember([]string{"json", "mysql"}, connDriver) {
err = cursor.Fetch(&data, 1, false)
} else {
dataAll := []toolkit.M{}
err = cursor.Fetch(&dataAll, 1, false)
if err != nil {
return false, []*colonycore.FieldInfo{}, errors.New("No data found")
}
if len(dataAll) > 0 {
data = dataAll[0]
}
}
metadata := d.parseMetadata(data)
if err != nil {
return false, nil, err
}
return true, metadata, nil
}
开发者ID:eaciit,项目名称:colony-manager,代码行数:55,代码来源:datasource.go
示例4: HasPartExec
func (q *Query) HasPartExec() error {
var e error
var lastJson []toolkit.M
q.ReadFile(&lastJson, q.Connection().(*Connection).filePath)
if toolkit.SliceLen(lastJson) > 0 {
getWhere := []*dbox.Filter{}
for _, v := range q.whereData {
getWhere = []*dbox.Filter{v}
i := dbox.Find(q.sliceData, getWhere)
for idSlice := range q.sliceData {
if toolkit.HasMember(i, idSlice) {
idata := dbox.Find(lastJson, getWhere)
for idx := range lastJson {
if toolkit.HasMember(idata, idx) {
lastJson[idx] = q.sliceData[idSlice]
}
}
if toolkit.SliceLen(idata) == 0 {
lastJson = append(lastJson, q.sliceData[idSlice])
}
}
}
}
q.sliceData = lastJson
} else {
idx := []int{}
for _, v := range q.whereData {
getWhere := []*dbox.Filter{v}
idx = dbox.Find(q.sliceData, getWhere)
}
// toolkit.Printf("newdata>%v\n", idx)
if toolkit.SliceLen(idx) > 1 {
newdata := toolkit.M{}
for idslice, dataslice := range q.sliceData {
if toolkit.HasMember(idx, idslice) {
idf, _ := toolkit.IdInfo(dataslice)
newdata = q.sliceData[idslice]
toolkit.CopyM(&dataslice, &newdata, false, []string{idf})
}
}
q.sliceData = []toolkit.M{}
q.sliceData = append(q.sliceData, newdata)
}
}
e = q.WriteFile(q.sliceData)
if e != nil {
return errorlib.Error(packageName, modQuery+".Exec", "HasPartExec", e.Error())
}
return nil
}
开发者ID:rinosukmandityo,项目名称:dbox,代码行数:55,代码来源:json_query.go
示例5: MatchV
func MatchV(v interface{}, f *Filter) bool {
match := false
/*
rv0 := reflect.ValueOf(v)
if rv0.Kind() == reflect.Ptr {
rv0 = reflect.Indirect(rv0)
}
rv1 := reflect.ValueOf(f.Value)
if rv1.Kind()==reflect.Ptr{
rv1=reflect.Indirect(rv1)
}
*/
//toolkit.Println("MatchV: ", f.Op, v, f.Value)
if toolkit.HasMember([]string{FilterOpEqual, FilterOpNoEqual, FilterOpGt, FilterOpGte, FilterOpLt, FilterOpLte}, f.Op) {
return toolkit.Compare(v, f.Value, f.Op)
} else if f.Op == FilterOpIn {
var values []interface{}
toolkit.FromBytes(toolkit.ToBytes(f.Value, ""), "", &values)
return toolkit.HasMember(values, v)
} else if f.Op == FilterOpNin {
var values []interface{}
toolkit.FromBytes(toolkit.ToBytes(f.Value, ""), "", &values)
return !toolkit.HasMember(values, v)
} else if f.Op == FilterOpContains {
var values []interface{}
var b bool
toolkit.FromBytes(toolkit.ToBytes(f.Value, ""), "", &values)
for _, val := range values {
// value := toolkit.Sprintf(".*%s.*", val.(string))
// b, _ = regexp.Match(value, []byte(v.(string)))
r := regexp.MustCompile(`(?i)` + val.(string))
b = r.Match([]byte(v.(string)))
if b {
return true
}
}
} else if f.Op == FilterOpStartWith || f.Op == FilterOpEndWith {
value := ""
if f.Op == FilterOpStartWith {
value = toolkit.Sprintf("^%s.*$", f.Value)
} else {
value = toolkit.Sprintf("^.*%s$", f.Value)
}
cond, _ := regexp.Match(value, []byte(v.(string)))
return cond
}
return match
}
开发者ID:rinosukmandityo,项目名称:dbox,代码行数:49,代码来源:dbox.go
示例6: extractData
func extractData(data toolkit.M, driverName string) (string, string, string) {
var attributes, setUpdate, values string
if data != nil {
var i int
for field, val := range data {
var datatypelist = []string{"map", "invalid", "struct", "slice"}
var value reflect.Value
if val != nil {
value = reflect.Zero(reflect.TypeOf(val))
}
if toolkit.HasMember(datatypelist, value.Kind().String()) {
continue
}
stringValues := StringValue(val, driverName)
if i == 0 {
attributes = "(" + field
setUpdate = field + " = " + stringValues
values = "(" + stringValues
} else {
attributes += ", " + field
setUpdate += ", " + field + " = " + stringValues
values += ", " + stringValues
}
i += 1
}
attributes += ")"
values += ")"
}
return attributes, setUpdate, values
}
开发者ID:rinosukmandityo,项目名称:dbox,代码行数:32,代码来源:rdbms_query.go
示例7: parseQuery
func (d *DataBrowserController) parseQuery(conn dbox.IConnection, dbrowser colonycore.DataBrowser, datacon *colonycore.Connection) (dbox.IQuery, error) {
var dataQuery dbox.IQuery
if dbrowser.QueryType == "nonQueryText" {
dataQuery = conn.NewQuery().From(dbrowser.TableNames)
} else if dbrowser.QueryType == "SQL" {
if toolkit.HasMember(rdbms, datacon.Driver) {
dataQuery = conn.NewQuery().Command("freequery", toolkit.M{}.
Set("syntax", dbrowser.QueryText))
} else {
return nil, errors.New("Free Text Query with SQL only for RDBMS, please use Dbox")
}
} else if dbrowser.QueryType == "Dbox" {
queryInfo := toolkit.M{}
toolkit.UnjsonFromString(dbrowser.QueryText, &queryInfo)
toolkit.Println("queryinfo", queryInfo)
if qFrom := queryInfo.Get("from", "").(string); qFrom != "" {
dataQuery = conn.NewQuery()
dataQuery = dataQuery.From(qFrom)
}
if qSelect := queryInfo.Get("select", "").(string); qSelect != "" {
if qSelect != "*" {
dataQuery = dataQuery.Select(strings.Split(qSelect, ",")...)
}
}
}
return dataQuery, nil
}
开发者ID:kranjcarz,项目名称:colony-manager,代码行数:29,代码来源:databrowser.go
示例8: extractDataBulk
func extractDataBulk(attrList []string, data toolkit.M, driverName string) string {
var values string
if data != nil {
for i, attr := range attrList {
val := data.Get(attr)
var datatypelist = []string{"map", "invalid", "struct", "slice"}
var value reflect.Value
if val != nil {
value = reflect.Zero(reflect.TypeOf(val))
}
if toolkit.HasMember(datatypelist, value.Kind().String()) {
continue
}
stringValues := StringValue(val, driverName)
if i == 0 {
values = "(" + stringValues
} else {
values += ", " + stringValues
}
}
values += ")"
}
return values
}
开发者ID:rinosukmandityo,项目名称:dbox,代码行数:26,代码来源:rdbms_query.go
示例9: ConnectUsingDataConn
func ConnectUsingDataConn(dataConn *colonycore.Connection) *queryWrapper {
if toolkit.HasMember([]string{"json", "jsons", "csv", "csvs"}, dataConn.Driver) && strings.HasPrefix(dataConn.Host, "http") {
return Query(dataConn.Driver, dataConn.FileLocation, "", "", "", dataConn.Settings)
}
return Query(dataConn.Driver, dataConn.Host, dataConn.Database, dataConn.UserName, dataConn.Password, dataConn.Settings)
}
开发者ID:nadnawidy,项目名称:colony-manager,代码行数:7,代码来源:query.go
示例10: ConnectUsingDataConn
func ConnectUsingDataConn(dataConn *colonycore.Connection) *queryWrapper {
if toolkit.HasMember([]string{"json", "jsons", "csv", "csvs"}, dataConn.Driver) && strings.HasPrefix(dataConn.Host, "http") {
if toolkit.IsFileExist(dataConn.FileLocation) || dataConn.FileLocation == "" {
fileTempID := RandomIDWithPrefix("f")
fileType := GetFileExtension(dataConn.Host)
dataConn.FileLocation = fmt.Sprintf("%s.%s", filepath.Join(os.Getenv("EC_DATA_PATH"), "datasource", "upload", fileTempID), fileType)
file, err := os.Create(dataConn.FileLocation)
if err != nil {
os.Remove(dataConn.FileLocation)
} else {
defer file.Close()
}
resp, err := http.Get(dataConn.Host)
if err != nil {
os.Remove(dataConn.FileLocation)
} else {
defer resp.Body.Close()
}
_, err = io.Copy(file, resp.Body)
if err != nil {
os.Remove(dataConn.FileLocation)
}
colonycore.Save(dataConn)
}
return Query(dataConn.Driver, dataConn.FileLocation, "", "", "", dataConn.Settings)
}
return Query(dataConn.Driver, dataConn.Host, dataConn.Database, dataConn.UserName, dataConn.Password, dataConn.Settings)
}
开发者ID:rinosukmandityo,项目名称:colony-manager,代码行数:35,代码来源:query.go
示例11: execQueryPartDelete
func (q *Query) execQueryPartDelete() error {
var e error
e = q.startWriteMode()
if e != nil {
return err.Error(packageName, modQuery, "Exec-Delete: ", e.Error())
}
writer := q.writer
reader := q.reader
tempHeader := []string{}
for _, val := range q.headerColumn {
tempHeader = append(tempHeader, val.name)
}
var i int = 0
for {
i += 1
dataTemp, e := reader.Read()
if e == io.EOF {
if !toolkit.HasMember(q.indexes, i) && len(dataTemp) > 0 {
writer.Write(dataTemp)
writer.Flush()
}
break
} else if e != nil {
_ = q.endWriteMode()
return err.Error(packageName, modQuery, "Exec-Delete: ", e.Error())
}
if !toolkit.HasMember(q.indexes, i) && len(dataTemp) > 0 {
writer.Write(dataTemp)
writer.Flush()
}
}
q.execOpr = true
e = q.endWriteMode()
if e != nil {
return err.Error(packageName, modQuery, "Exec-Delete: ", e.Error())
}
return nil
}
开发者ID:rinosukmandityo,项目名称:dbox,代码行数:45,代码来源:query.go
示例12: SaveConnection
func (d *DataSourceController) SaveConnection(r *knot.WebContext) interface{} {
r.Config.OutputType = knot.OutputJson
payload := map[string]interface{}{}
err := r.GetPayload(&payload)
if err != nil {
return helper.CreateResult(false, nil, err.Error())
}
o := new(colonycore.Connection)
o.ID = payload["_id"].(string)
o.Driver = payload["Driver"].(string)
o.Host = payload["Host"].(string)
o.Database = payload["Database"].(string)
o.UserName = payload["UserName"].(string)
o.Password = payload["Password"].(string)
o.Settings = d.parseSettings(payload["Settings"], map[string]interface{}{}).(map[string]interface{})
err = colonycore.Delete(o)
if err != nil {
return helper.CreateResult(false, nil, err.Error())
}
if toolkit.HasMember([]string{"csv", "json"}, o.Driver) {
if strings.HasPrefix(o.Host, "http") {
fileType := helper.GetFileExtension(o.Host)
o.FileLocation = fmt.Sprintf("%s.%s", filepath.Join(EC_DATA_PATH, "datasource", "upload", o.ID), fileType)
file, err := os.Create(o.FileLocation)
if err != nil {
return helper.CreateResult(false, nil, err.Error())
}
defer file.Close()
resp, err := http.Get(o.Host)
if err != nil {
return helper.CreateResult(false, nil, err.Error())
}
defer resp.Body.Close()
_, err = io.Copy(file, resp.Body)
if err != nil {
return helper.CreateResult(false, nil, err.Error())
}
} else {
o.FileLocation = o.Host
}
}
err = colonycore.Save(o)
if err != nil {
return helper.CreateResult(false, nil, err.Error())
}
return helper.CreateResult(true, nil, "")
}
开发者ID:Budianto55,项目名称:colony-manager,代码行数:56,代码来源:datasource.go
示例13: extractFields
func extractFields(data toolkit.M) []string {
var attributes []string
if data != nil {
for field, val := range data {
var datatypelist = []string{"map", "invalid", "struct", "slice"}
var value reflect.Value
if val != nil {
value = reflect.Zero(reflect.TypeOf(val))
}
if toolkit.HasMember(datatypelist, value.Kind().String()) {
continue
}
attributes = append(attributes, field)
}
}
return attributes
}
开发者ID:rinosukmandityo,项目名称:dbox,代码行数:17,代码来源:rdbms_query.go
示例14: openFile
func (q *Query) openFile(commandtype string) error {
if q.fileHasBeenOpened {
return nil
}
_, e := os.Stat(q.jsonPath)
setting := q.Connection().Info().Settings
if e != nil && toolkit.HasMember([]interface{}{dbox.QueryPartSave, dbox.QueryPartInsert}, commandtype) &&
strings.Contains(e.Error(), "cannot find the file specified") && setting != nil {
newfile := setting.Get("newfile", false).(bool)
if newfile {
e = q.writeFile()
if e != nil {
return err.Error(packageName, modQuery, "openFile: "+commandtype+" Write fail", e.Error())
}
} else {
return err.Error(packageName, modQuery, "openFile: "+commandtype+" Create new file is false", e.Error())
}
} else if e != nil && (strings.Contains(e.Error(), "does not exist") || strings.Contains(e.Error(), "no such file or directory")) {
q.data = []toolkit.M{}
return nil
} else if e != nil {
return err.Error(packageName, modQuery, "openFile: Open file fail", e.Error())
}
bs, e := ioutil.ReadFile(q.jsonPath)
if e != nil {
return err.Error(packageName, modQuery, "openFile: Read file data fail", e.Error())
}
jsonText := string(bs)
var tempData []toolkit.M
e = toolkit.UnjsonFromString(jsonText, &tempData)
if e != nil {
return err.Error(packageName, modQuery, "openFile: Serializaion fail", e.Error())
}
q.data = tempData
q.fileHasBeenOpened = true
return nil
}
开发者ID:rinosukmandityo,项目名称:dbox,代码行数:40,代码来源:query.go
示例15: GetDataSourceCollections
func (d *DataSourceController) GetDataSourceCollections(r *knot.WebContext) interface{} {
r.Config.OutputType = knot.OutputJson
payload := map[string]interface{}{}
err := r.GetPayload(&payload)
if err != nil {
return helper.CreateResult(false, nil, err.Error())
}
connectionID := payload["connectionID"].(string)
if connectionID == "" {
return helper.CreateResult(true, []string{}, "")
}
dataConn := new(colonycore.Connection)
err = colonycore.Get(dataConn, connectionID)
if err != nil {
return helper.CreateResult(false, nil, err.Error())
}
if err := d.checkIfDriverIsSupported(dataConn.Driver); err != nil {
return helper.CreateResult(false, nil, err.Error())
}
if toolkit.HasMember([]string{"csv", "json"}, dataConn.Driver) {
return helper.CreateResult(true, []string{dataConn.Driver}, "")
}
var conn dbox.IConnection
conn, err = helper.ConnectUsingDataConn(dataConn).Connect()
if err != nil {
return helper.CreateResult(false, nil, err.Error())
}
defer conn.Close()
collections := conn.ObjectNames(dbox.ObjTypeTable)
return helper.CreateResult(true, collections, "")
}
开发者ID:eaciit,项目名称:colony-manager,代码行数:38,代码来源:datasource.go
示例16: getLogger
func (d *DataGrabberController) getLogger(dataGrabber *colonycore.DataGrabber) (*toolkit.LogEngine, error) {
logAt := time.Now().Format("20060102-150405")
logFileName := strings.Split(logAt, "-")[0]
logFileNameParsed := fmt.Sprintf("%s-%s", dataGrabber.ID, logFileName)
logFilePattern := ""
logConf, err := toolkit.NewLog(false, true, dgLogPath, logFileNameParsed, logFilePattern)
if err != nil {
return nil, err
}
currentDataGrabber := new(colonycore.DataGrabber)
err = colonycore.Get(currentDataGrabber, dataGrabber.ID)
if err != nil {
logConf.AddLog(err.Error(), "ERROR")
return logConf, err
}
if currentDataGrabber.RunAt == nil {
currentDataGrabber.RunAt = []string{}
}
if !toolkit.HasMember(currentDataGrabber.RunAt, logAt) {
currentDataGrabber.RunAt = append(currentDataGrabber.RunAt, logAt)
}
err = colonycore.Delete(currentDataGrabber)
if err != nil {
logConf.AddLog(err.Error(), "ERROR")
return logConf, err
}
err = colonycore.Save(currentDataGrabber)
if err != nil {
logConf.AddLog(err.Error(), "ERROR")
return logConf, err
}
return logConf, nil
}
开发者ID:eaciit,项目名称:colony-manager,代码行数:38,代码来源:datagrabber.go
示例17: toInterface
func toInterface(data string, dataType string, dateFormat string) interface{} {
if dataType == "" {
if strings.HasPrefix(data, "#") && strings.HasSuffix(data, "#") {
dataType = DataDate
} else {
vfloat := toolkit.ToFloat64(dataType, 2, toolkit.RoundingAuto)
vint := toolkit.ToInt(dataType, toolkit.RoundingAuto)
if int(vfloat) == vint && vint != 0 {
dataType = DataInt
} else if vfloat != 0 {
// dataType = DataFloat
b, i := toolkit.MemberIndex(DataFloats, dataType)
if b {
for idx, dataFloat := range DataFloats {
if idx == i {
dataType = dataFloat
}
}
}
} else {
dataType = DataString
}
}
}
if dataType == DataDate {
return toolkit.String2Date(data, dateFormat)
} else if dataType == DataInt {
return toolkit.ToInt(data, toolkit.RoundingAuto)
} else if toolkit.HasMember(DataFloats, dataType) {
return toolkit.ToFloat64(data, 2, toolkit.RoundingAuto)
} else {
return data
}
return nil
}
开发者ID:rinosukmandityo,项目名称:dbox,代码行数:37,代码来源:filter.go
示例18: GenerateNewField
func (d *DataGrabberController) GenerateNewField(payload *colonycore.DataGrabber) (bool, error) {
dsDestination := new(colonycore.DataSource)
err := colonycore.Get(dsDestination, payload.DataSourceDestination)
if err != nil {
return false, err
}
dataConnDest := new(colonycore.Connection)
err = colonycore.Get(dataConnDest, dsDestination.ConnectionID)
if err != nil {
return false, err
}
tableName := dsDestination.QueryInfo.GetString("from")
dataDSnm, _, conn, query, _, err := CreateDataSourceController(d.Server).ConnectToDataSource(payload.DataSourceDestination)
if err != nil {
return false, err
}
defer conn.Close()
cursor, err := query.Cursor(nil)
if err != nil {
return false, err
}
defer cursor.Close()
dataNewDest := toolkit.M{}
if !toolkit.HasMember([]string{"json", "mysql"}, dataConnDest.Driver) {
err = cursor.Fetch(&dataNewDest, 1, false)
} else {
dataAll := []toolkit.M{}
err = cursor.Fetch(&dataAll, 1, false)
if err != nil {
return false, err
}
if len(dataAll) > 0 {
dataNewDest = dataAll[0]
}
}
var fieldID = []string{}
for _, each := range dataDSnm.MetaData {
fieldID = append(fieldID, each.ID)
}
for _, each := range payload.Maps {
//pengecekan ada field maps atau tidak pada metaddata dsDestination
if !toolkit.HasMember(fieldID, each.Destination) {
//create new field
dataNewDest.Set(each.Destination, nil)
}
}
err = conn.NewQuery().Save().From(tableName).Exec(toolkit.M{"data": dataNewDest})
if err != nil {
return false, err
}
return true, nil
}
开发者ID:eaciit,项目名称:colony-manager,代码行数:62,代码来源:datagrabber.go
示例19: Exec
//.........这里部分代码省略.........
}
result := dbox.Find(dataMaps, getWhere)
if len(result) > 0 {
return errorlib.Error(packageName, modCursor+".Exec", commandType, "ID already exist, unable insert data ")
}
if dataIsSlice {
var sliceData []toolkit.M
for _, v := range dataMs {
sliceData = finUpdateObj(dataMaps, v, "insert")
}
updatedValue = sliceData
} else {
updatedValue = finUpdateObj(dataMaps, dataM, "insert")
}
} else if commandType == dbox.QueryPartUpdate {
hasCmdType.Set("hasUpdate", true)
if !hasData {
return errorlib.Error(packageName, modCursor+".Exec", commandType, "Sorry data not found!, unable to update data")
}
if hasWhere {
var indexes []interface{}
whereIndex := dbox.Find(dataMaps, getWhere)
indexes = toolkit.ToInterfaceArray(&whereIndex)
// toolkit.Printf("whereIndex>%v indexes%v\n", whereIndex, indexes)
var dataUpdate toolkit.M
var updateDataIndex int
isDataSlice := toolkit.IsSlice(data)
if isDataSlice == false {
isDataSlice = false
data, e = toolkit.ToM(data)
if e != nil {
return errorlib.Error(packageName, modQuery, "Exec: "+commandType, "Serde data fail"+e.Error())
}
e = toolkit.Serde(data, &dataUpdate, "")
if e != nil {
return errorlib.Error(packageName, modQuery, "Exec: "+commandType, "Serde data fail"+e.Error())
}
}
for i, v := range dataMaps {
if toolkit.HasMember(indexes, i) || !hasWhere {
if isDataSlice {
e = toolkit.Serde(toolkit.SliceItem(data, updateDataIndex), &dataUpdate, "")
if e != nil {
return errorlib.Error(packageName, modQuery, "Exec: "+commandType, "Serde data fail"+e.Error())
}
updateDataIndex++
}
dataOrigin := dataMaps[i]
toolkit.CopyM(&dataUpdate, &dataOrigin, false, []string{"_id"})
toolkit.Serde(dataOrigin, &v, "")
dataMaps[i] = v
}
}
updatedValue = dataMaps
} else {
updatedValue = finUpdateObj(dataMaps, dataM, "update")
}
} else if commandType == dbox.QueryPartDelete {
hasCmdType.Set("hasDelete", true)
// if multi {
if hasWhere {
result := dbox.Find(dataMaps, getWhere)
if len(result) > 0 {
for i, v := range dataMaps {
if toolkit.HasMember(result, i) == false {
updatedValue = append(updatedValue, v)
}
}
}
} else {
updatedValue = []toolkit.M{}
}
} else if commandType == dbox.QueryPartSave {
hasCmdType.Set("hasSave", true)
if !hasData {
return errorlib.Error(packageName, modCursor+".Exec", commandType, "Sorry data not found!, unable to update data")
}
q.dataType = "save"
q.whereData = append(q.whereData, getWhere...)
q.sliceData = append(q.sliceData, dataM)
}
if hasCmdType.Has("hasInsert") || hasCmdType.Has("hasUpdate") || hasCmdType.Has("hasDelete") {
e = q.WriteFile(updatedValue)
if e != nil {
return errorlib.Error(packageName, modQuery+".Exec", commandType, e.Error())
}
}
return nil
}
开发者ID:Budianto55,项目名称:dbox,代码行数:101,代码来源:json_query.go
示例20: ConnectToDataSourceDB
//.........这里部分代码省略.........
qcount, _ := d.parseQuery(connection.NewQuery(), TblName)
query, _ := d.parseQuery(connection.NewQuery() /*.Skip(skip).Take(take) .Order(sorter)*/, payload)
var selectfield string
for _, metadata := range dataDS.MetaData {
tField := metadata.Field
if payload.Has(tField) {
selectfield = toolkit.ToString(tField)
if toolkit.IsSlice(payload[tField]) {
query = query.Where(dbox.In(tField, payload[tField].([]interface{})...))
qcount = qcount.Where(dbox.In(tField, payload[tField].([]interface{})...))
} else if !toolkit.IsNilOrEmpty(payload[tField]) {
var hasPattern bool
for _, val := range querypattern {
if strings.Contains(toolkit.ToString(payload[tField]), val) {
hasPattern = true
}
}
if hasPattern {
query = query.Where(dbox.ParseFilter(toolkit.ToString(tField), toolkit.ToString(payload[tField]),
toolkit.ToString(metadata.DataType), ""))
qcount = qcount.Where(dbox.ParseFilter(toolkit.ToString(tField), toolkit.ToString(payload[tField]),
toolkit.ToString(metadata.DataType), ""))
} else {
switch toolkit.ToString(metadata.DataType) {
case "int":
query = query.Where(dbox.Eq(tField, toolkit.ToInt(payload[tField], toolkit.RoundingAuto)))
qcount = qcount.Where(dbox.Eq(tField, toolkit.ToInt(payload[tField], toolkit.RoundingAuto)))
case "float32":
query = query.Where(dbox.Eq(tField, toolkit.ToFloat32(payload[tField], 2, toolkit.RoundingAuto)))
qcount = qcount.Where(dbox.Eq(tField, toolkit.ToFloat32(payload[tField], 2, toolkit.RoundingAuto)))
case "float64":
query = query.Where(dbox.Eq(tField, toolkit.ToFloat64(payload[tField], 2, toolkit.RoundingAuto)))
qcount = qcount.Where(dbox.Eq(tField, toolkit.ToFloat64(payload[tField], 2, toolkit.RoundingAuto)))
default:
query = query.Where(dbox.Contains(tField, toolkit.ToString(payload[tField])))
qcount = qcount.Where(dbox.Contains(tField, toolkit.ToString(payload[tField])))
}
}
}
}
}
if hasLookup && selectfield != "" {
if toolkit.HasMember(ds_flatfile, dataConn.Driver) {
query = query.Select(selectfield)
qcount = qcount.Select(selectfield)
} else {
query = query.Select(selectfield).Group(selectfield)
qcount = qcount.Select(selectfield).Group(selectfield)
}
}
ccount, err := qcount.Cursor(nil)
if err != nil {
return 0, nil, nil, err
}
defer ccount.Close()
dcount := ccount.Count()
cursor, err := query.Cursor(nil)
if err != nil {
return 0, nil, nil, err
}
defer cursor.Close()
data := []toolkit.M{}
cursor.Fetch(&data, 0, false)
if err != nil {
return 0, nil, nil, err
}
if hasLookup && selectfield != "" && !toolkit.HasMember(ds_rdbms, dataConn.Driver) &&
!toolkit.HasMember(ds_flatfile, dataConn.Driver) {
dataMongo := []toolkit.M{}
for _, val := range data {
mVal, _ := toolkit.ToM(val.Get("_id"))
dataMongo = append(dataMongo, mVal)
}
data = dataMongo
} else if hasLookup && selectfield != "" && toolkit.HasMember(ds_flatfile, dataConn.Driver) {
/*distinct value for flat file*/
dataFlat := []toolkit.M{}
var existingVal = []string{""}
for _, val := range data {
valString := toolkit.ToString(val.Get(selectfield))
if !toolkit.HasMember(existingVal, valString) {
dataFlat = append(dataFlat, val)
existingVal = append(existingVal, valString)
}
}
data = dataFlat
}
return dcount, data, dataDS, nil
}
开发者ID:Budianto55,项目名称:colony-manager,代码行数:101,代码来源:datasource.go
注:本文中的github.com/eaciit/toolkit.HasMember函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论