demo.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  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. Create(map[string]any{
  101. "id": classID1,
  102. "name": className1,
  103. "student_num": studentNum1,
  104. })
  105. if err != nil {
  106. panic(err)
  107. }
  108. err = sdk.GetInstance().GetDBOperations().NewSession().
  109. Table("test.classes").
  110. Create(map[string]any{
  111. "id": classID2,
  112. "name": className2,
  113. "student_num": studentNum2,
  114. })
  115. if err != nil {
  116. panic(err)
  117. }
  118. tx := sdk.GetInstance().GetDBOperations().BeginTransaction()
  119. _, err = tx.
  120. Raw("UPDATE test.classes SET name = ?, student_num = ? WHERE id = ?", newClassName1, newStudentNum1, classID1).
  121. Rows(0, 0)
  122. if err != nil {
  123. tx.RollbackTransaction()
  124. panic(err)
  125. }
  126. tx.CommitTransaction()
  127. tableRow, err := sdk.GetInstance().GetDBOperations().NewSession().
  128. Table("test.classes").
  129. Where("id = ?", classID1).
  130. Row()
  131. if err != nil {
  132. panic(err)
  133. }
  134. if tableRow["id"] != classID1 || tableRow["name"] != newClassName1 || tableRow["student_num"] != newStudentNum1 {
  135. panic("数据查询错误")
  136. }
  137. tableRows, err := sdk.GetInstance().GetDBOperations().NewSession().
  138. Raw("SELECT * FROM test.classes LIMIT 1 OFFSET 1").
  139. Rows(0, 0)
  140. if err != nil {
  141. panic(err)
  142. }
  143. for _, tableRow := range tableRows {
  144. if tableRow["id"] == classID1 {
  145. if tableRow["name"] != newClassName1 || tableRow["student_num"] != newStudentNum1 {
  146. panic("数据查询错误")
  147. }
  148. } else {
  149. if tableRow["name"] != className2 || tableRow["student_num"] != studentNum2 {
  150. panic("数据查询错误")
  151. }
  152. }
  153. }
  154. err = sdk.GetInstance().CreateSQL(sql, sqlSpec.ToMap())
  155. if err != nil {
  156. panic(err)
  157. }
  158. _, err = sdk.GetInstance().ExecuteSql(sql, map[string]any{"id": classID1})
  159. if err != nil {
  160. panic(err)
  161. }
  162. err = sdk.GetInstance().DeleteSQL(sql)
  163. if err != nil {
  164. panic(err)
  165. }
  166. err = sdk.GetInstance().DeleteDataContainer(dataContainer)
  167. if err != nil {
  168. panic(err)
  169. }
  170. }