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 }
func (d *DataSourceController) parseQuery(query dbox.IQuery, queryInfo toolkit.M) (dbox.IQuery, MetaSave) { metaSave := MetaSave{} if qFrom := queryInfo.Get("from", "").(string); qFrom != "" { query = query.From(qFrom) } if qSelect := queryInfo.Get("select", "").(string); qSelect != "" { if qSelect != "*" { query = query.Select(strings.Split(qSelect, ",")...) } } if qTakeRaw, qTakeOK := queryInfo["take"]; qTakeOK { if qTake, ok := qTakeRaw.(float64); ok { query = query.Take(int(qTake)) } if qTake, ok := qTakeRaw.(int); ok { query = query.Take(qTake) } } if qSkipRaw, qSkipOK := queryInfo["skip"]; qSkipOK { if qSkip, ok := qSkipRaw.(float64); ok { query = query.Take(int(qSkip)) } if qSkip, ok := qSkipRaw.(int); ok { query = query.Take(qSkip) } } if qOrder := queryInfo.Get("order", "").(string); qOrder != "" { orderAll := map[string]string{} err := json.Unmarshal([]byte(qOrder), &orderAll) if err == nil { orderString := []string{} for key, val := range orderAll { orderString = append(orderString, key) orderString = append(orderString, val) } query = query.Order(orderString...) } } if qInsert := queryInfo.Get("insert", "").(string); qInsert != "" { if qInsert != "" { metaSave.keyword = "insert" metaSave.data = qInsert query = query.Insert() } } if qUpdate := queryInfo.Get("update", "").(string); qUpdate != "" { if qUpdate != "" { metaSave.keyword = "update" metaSave.data = qUpdate query = query.Update() } } if _, qDeleteOK := queryInfo["delete"]; qDeleteOK { metaSave.keyword = "delete" query = query.Delete() } if qCommand := queryInfo.Get("command", "").(string); qCommand != "" { command := map[string]interface{}{} err := json.Unmarshal([]byte(qCommand), &command) if err == nil { for key, value := range command { query = query.Command(key, value) break } } } if qWhere := queryInfo.Get("where", "").(string); qWhere != "" { whereAll := []map[string]interface{}{} err := json.Unmarshal([]byte(qWhere), &whereAll) if err == nil { allFilter := []*dbox.Filter{} for _, each := range whereAll { where, _ := toolkit.ToM(each) filter := d.filterParse(where) if filter != nil { allFilter = append(allFilter, filter) } } query = query.Where(allFilter...) } } return query, metaSave }