demo.go 4.5 KB

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