util.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package xsql
  2. import "strings"
  3. func PrintFieldType(ft FieldType) (result string) {
  4. switch t := ft.(type) {
  5. case *BasicType:
  6. result = t.Type.String()
  7. case *ArrayType:
  8. result = "array("
  9. if t.FieldType != nil {
  10. result += PrintFieldType(t.FieldType)
  11. } else {
  12. result += t.Type.String()
  13. }
  14. result += ")"
  15. case *RecType:
  16. result = "struct("
  17. isFirst := true
  18. for _, f := range t.StreamFields {
  19. if isFirst {
  20. isFirst = false
  21. } else {
  22. result += ", "
  23. }
  24. result = result + f.Name + " " + PrintFieldType(f.FieldType)
  25. }
  26. result += ")"
  27. }
  28. return
  29. }
  30. func GetStreams(stmt *SelectStatement) (result []string) {
  31. if stmt == nil {
  32. return nil
  33. }
  34. for _, source := range stmt.Sources {
  35. if s, ok := source.(*Table); ok {
  36. result = append(result, s.Name)
  37. }
  38. }
  39. for _, join := range stmt.Joins {
  40. result = append(result, join.Name)
  41. }
  42. return
  43. }
  44. func LowercaseKeyMap(m map[string]interface{}) map[string]interface{} {
  45. m1 := make(map[string]interface{})
  46. for k, v := range m {
  47. if m2, ok := v.(map[string]interface{}); ok {
  48. m1[strings.ToLower(k)] = LowercaseKeyMap(m2)
  49. } else {
  50. m1[strings.ToLower(k)] = v
  51. }
  52. }
  53. return m1
  54. }