mql_odbc_query.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package odbcmql
  2. import (
  3. "context"
  4. "fmt"
  5. "strings"
  6. "time"
  7. odb "git.wecise.com/wecise/odb-go/odb"
  8. "gitee.com/wecisecode/util/cast"
  9. )
  10. func ODBCQueryWithTimeoutDo(ctx context.Context, qmeta odb.QueryMeta, timeout time.Duration, mql string, values ...interface{}) (*odb.Result, error) {
  11. var q odb.Query
  12. if mql[0] == '#' {
  13. q = ODBC.Search(mql)
  14. } else if len(mql) >= 4 && strings.ToLower(mql[:4]) == "cql:" {
  15. q = ODBC.QueryCql(strings.TrimSpace(mql[4:]), values...)
  16. } else if len(mql) >= 4 && strings.ToLower(mql[:4]) == "sql:" {
  17. q = ODBC.QuerySql(strings.TrimSpace(mql[4:]), values...)
  18. } else if len(mql) >= 4 && strings.ToLower(mql[:4]) == "cmd:" {
  19. args := strings.Split(strings.TrimSpace(mql[4:]), " ")
  20. vals := []any{}
  21. for _, arg := range args {
  22. arg = strings.TrimSpace(arg)
  23. if arg != "" {
  24. vals = append(vals, arg)
  25. }
  26. }
  27. vals = append(vals, values...)
  28. if len(vals) == 0 {
  29. return nil, fmt.Errorf("odbc cmd is empty")
  30. }
  31. cmd := cast.ToString(vals[0])
  32. vals = vals[1:]
  33. q = ODBC.Command(cmd, vals...)
  34. } else {
  35. q = ODBC.Query(mql, values...)
  36. }
  37. return q.WithContext(ctx).WithMeta(qmeta).WithTimeout(timeout).Do()
  38. }