xugu_fields.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. package xugu
  2. import (
  3. "database/sql"
  4. "reflect"
  5. "time"
  6. )
  7. type xuguField struct {
  8. tableName string
  9. /*
  10. * Store the name of the column
  11. * name of the current field
  12. * */
  13. name string
  14. length int
  15. /*
  16. * Store the data type information
  17. * of the current field column
  18. * */
  19. fieldType fieldType
  20. }
  21. type fieldType byte
  22. const (
  23. fieldTypeBool fieldType = iota + 0x01
  24. fieldTypeChar
  25. fieldTypeTinyint
  26. fieldTypeShort
  27. fieldTypeInteger
  28. fieldTypeBigint
  29. fieldTypeFloat
  30. fieldTypeDouble
  31. fieldTypeNumeric
  32. fieldTypeDate
  33. fieldTypeTime
  34. fieldTypeTimeTZ
  35. fieldTypeDatetime fieldType = 23
  36. fieldTypeDatetimeTZ fieldType = 14
  37. fieldTypeBinary fieldType = 15
  38. fieldTypeVarChar fieldType = 30
  39. fieldTypeInterval fieldType = 21
  40. fieldTypeIntervalY2M fieldType = 28
  41. fieldTypeIntervalD2S fieldType = 31
  42. fieldTypeLob fieldType = 40
  43. fieldTypeClob fieldType = 41
  44. fieldTypeBlob fieldType = 42
  45. )
  46. /* {{ */
  47. func (self *FieldDescri) typeDatabaseName() string {
  48. switch self.FieldType {
  49. case fieldTypeBool:
  50. return "BOOLEAN"
  51. case fieldTypeChar, fieldTypeVarChar:
  52. return "CHAR"
  53. case fieldTypeTinyint:
  54. return "TINYINT"
  55. case fieldTypeShort:
  56. return "SHORT"
  57. case fieldTypeInteger:
  58. return "INTEGER"
  59. case fieldTypeBigint:
  60. return "BIGINT"
  61. case fieldTypeFloat:
  62. return "FLOAT"
  63. case fieldTypeDouble:
  64. return "DOUBLE"
  65. case fieldTypeNumeric:
  66. return "NUMERIC"
  67. case fieldTypeDate:
  68. return "DATE"
  69. case fieldTypeTime:
  70. return "TIME"
  71. case fieldTypeTimeTZ:
  72. return "TIMEZONE"
  73. case fieldTypeDatetime:
  74. return "DATETIME"
  75. case fieldTypeDatetimeTZ:
  76. return "DATETIME TIMEZONE"
  77. case fieldTypeBinary:
  78. return "BINARY"
  79. case fieldTypeInterval:
  80. return "INTERVAL"
  81. case fieldTypeIntervalY2M:
  82. return "INTERVAL YEAR TO MONTH"
  83. case fieldTypeIntervalD2S:
  84. return "INTERVAL DAY TO SECOND"
  85. case fieldTypeClob:
  86. return "CLOB"
  87. case fieldTypeBlob:
  88. return "BLOB"
  89. default:
  90. return ""
  91. }
  92. }
  93. /* {{ */
  94. func (self *FieldDescri) scanType() reflect.Type {
  95. switch self.FieldType {
  96. case fieldTypeBool:
  97. return scanTypeBool
  98. case fieldTypeTinyint:
  99. return scanTypeInt8
  100. case fieldTypeShort:
  101. return scanTypeInt16
  102. case fieldTypeInteger:
  103. return scanTypeInt32
  104. case fieldTypeBigint:
  105. return scanTypeInt64
  106. case fieldTypeFloat:
  107. return scanTypeFloat32
  108. case fieldTypeDouble:
  109. return scanTypeFloat64
  110. case fieldTypeDate,
  111. fieldTypeTime,
  112. fieldTypeDatetime:
  113. return scanTypeNullTime
  114. case fieldTypeTimeTZ,
  115. fieldTypeDatetimeTZ,
  116. fieldTypeChar,
  117. fieldTypeVarChar,
  118. fieldTypeBinary,
  119. fieldTypeInterval,
  120. fieldTypeNumeric,
  121. fieldTypeIntervalY2M,
  122. fieldTypeIntervalD2S,
  123. fieldTypeLob,
  124. fieldTypeClob,
  125. fieldTypeBlob:
  126. return scanTypeRawBytes
  127. default:
  128. return scanTypeUnknown
  129. }
  130. }
  131. var (
  132. scanTypeFloat32 = reflect.TypeOf(float32(0))
  133. scanTypeFloat64 = reflect.TypeOf(float64(0))
  134. scanTypeNullFloat = reflect.TypeOf(sql.NullFloat64{})
  135. scanTypeNullInt = reflect.TypeOf(sql.NullInt64{})
  136. scanTypeNullTime = reflect.TypeOf(time.Time{})
  137. scanTypeInt8 = reflect.TypeOf(int8(0))
  138. scanTypeInt16 = reflect.TypeOf(int16(0))
  139. scanTypeInt32 = reflect.TypeOf(int32(0))
  140. scanTypeInt64 = reflect.TypeOf(int64(0))
  141. scanTypeUnknown = reflect.TypeOf(new(interface{}))
  142. scanTypeRawBytes = reflect.TypeOf(sql.RawBytes{})
  143. scanTypeUint8 = reflect.TypeOf(uint8(0))
  144. scanTypeUint16 = reflect.TypeOf(uint16(0))
  145. scanTypeUint32 = reflect.TypeOf(uint32(0))
  146. scanTypeUint64 = reflect.TypeOf(uint64(0))
  147. scanTypeBool = reflect.TypeOf(bool(false))
  148. )