util.go 1.2 KB

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