demo.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. package main
  2. import (
  3. "git.sxidc.com/go-tools/utils/strutils"
  4. "git.sxidc.com/service-supports/ds-sdk/sdk"
  5. "math/rand"
  6. )
  7. const (
  8. token = "IpTTwAQweh/BP51fz5CzWKQFaXHvZe6ewvk6yOcAOkU="
  9. baseUrl = "http://localhost:10000"
  10. namespace = "ns-sdk-demo"
  11. dataSource = "ds-sdk-demo"
  12. dataContainer = "dc-sdk-demo"
  13. sql = "delete-sdk-demo"
  14. )
  15. var (
  16. dataSourceSpec = sdk.DataSourceDatabaseSpec{
  17. Type: sdk.DataSourceDatabaseTypePostgres,
  18. UserName: "test",
  19. Password: "123456",
  20. Address: "localhost",
  21. Port: "30432",
  22. Database: "test",
  23. MaxConnections: 40,
  24. MaxIdleConnections: 10,
  25. }
  26. dataContainerSpec = sdk.DataContainerDatabaseSpec{
  27. TableName: "test.classes",
  28. Columns: []sdk.DataContainerDatabaseColumnSpec{
  29. {
  30. Name: "id",
  31. Type: "varchar(32)",
  32. Comment: "id",
  33. PrimaryKey: true,
  34. },
  35. {
  36. Name: "name",
  37. Type: "varchar(128)",
  38. Comment: "班名",
  39. NotNull: true,
  40. },
  41. {
  42. Name: "student_num",
  43. Type: "integer",
  44. Comment: "学生数量",
  45. Default: 60,
  46. },
  47. },
  48. }
  49. sqlSpec = sdk.SqlSpec{
  50. Transaction: false,
  51. Clauses: "- DELETE FROM test.classes WHERE id = '{{ .id }}'",
  52. }
  53. )
  54. func main() {
  55. classID1 := strutils.SimpleUUID()
  56. className1 := strutils.SimpleUUID()
  57. studentNum1 := rand.Int31n(100)
  58. newClassName1 := strutils.SimpleUUID()
  59. newStudentNum1 := rand.Int31n(100)
  60. classID2 := strutils.SimpleUUID()
  61. className2 := strutils.SimpleUUID()
  62. studentNum2 := rand.Int31n(100)
  63. err := sdk.InitInstance(token, baseUrl, namespace, &sdk.DataSourceOption{
  64. Name: dataSource,
  65. Type: sdk.DataSourceTypeDatabase,
  66. Spec: dataSourceSpec.ToMap(),
  67. })
  68. if err != nil {
  69. panic(err)
  70. }
  71. defer func() {
  72. err := sdk.DestroyInstance()
  73. if err != nil {
  74. panic(err)
  75. }
  76. }()
  77. err = sdk.GetInstance().CreateDataContainer(dataContainer, dataContainerSpec.ToMap())
  78. if err != nil {
  79. panic(err)
  80. }
  81. err = sdk.GetInstance().GetDBOperations().NewSession().
  82. Table("test.classes").
  83. Create(map[string]any{
  84. "id": classID1,
  85. "name": className1,
  86. "student_num": studentNum1,
  87. })
  88. if err != nil {
  89. panic(err)
  90. }
  91. err = sdk.GetInstance().GetDBOperations().NewSession().
  92. Table("test.classes").
  93. Where("id = ?", classID1).
  94. Delete()
  95. if err != nil {
  96. panic(err)
  97. }
  98. err = sdk.GetInstance().GetDBOperations().NewSession().
  99. Table("test.classes").
  100. CreateBatch([]map[string]any{
  101. {
  102. "id": classID1,
  103. "name": className1,
  104. "student_num": studentNum1,
  105. },
  106. {
  107. "id": classID2,
  108. "name": className2,
  109. "student_num": studentNum2,
  110. },
  111. })
  112. if err != nil {
  113. panic(err)
  114. }
  115. tx := sdk.GetInstance().GetDBOperations().BeginTransaction()
  116. _, err = tx.
  117. Raw("UPDATE test.classes SET name = ?, student_num = ? WHERE id = ?", newClassName1, newStudentNum1, classID1).
  118. Rows(0, 0)
  119. if err != nil {
  120. tx.RollbackTransaction()
  121. panic(err)
  122. }
  123. tx.CommitTransaction()
  124. tableRow, err := sdk.GetInstance().GetDBOperations().NewSession().
  125. Table("test.classes").
  126. Where("id = ?", classID1).
  127. Row()
  128. if err != nil {
  129. panic(err)
  130. }
  131. if tableRow["id"] != classID1 || tableRow["name"] != newClassName1 || tableRow["student_num"] != newStudentNum1 {
  132. panic("数据查询错误")
  133. }
  134. tableRows, err := sdk.GetInstance().GetDBOperations().NewSession().
  135. Raw("SELECT * FROM test.classes LIMIT 1 OFFSET 1").
  136. Rows(0, 0)
  137. if err != nil {
  138. panic(err)
  139. }
  140. for _, tableRow := range tableRows {
  141. if tableRow["id"] == classID1 {
  142. if tableRow["name"] != newClassName1 || tableRow["student_num"] != newStudentNum1 {
  143. panic("数据查询错误")
  144. }
  145. } else {
  146. if tableRow["name"] != className2 || tableRow["student_num"] != studentNum2 {
  147. panic("数据查询错误")
  148. }
  149. }
  150. }
  151. err = sdk.GetInstance().CreateSQL(sql, sqlSpec.ToMap())
  152. if err != nil {
  153. panic(err)
  154. }
  155. _, err = sdk.GetInstance().ExecuteSql(sql, map[string]any{"id": classID1})
  156. if err != nil {
  157. panic(err)
  158. }
  159. err = sdk.GetInstance().DeleteSQL(sql)
  160. if err != nil {
  161. panic(err)
  162. }
  163. err = sdk.GetInstance().DeleteDataContainer(dataContainer)
  164. if err != nil {
  165. panic(err)
  166. }
  167. }