sql.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797
  1. package sdk
  2. import (
  3. "errors"
  4. "git.sxidc.com/go-tools/utils/strutils"
  5. "git.sxidc.com/service-supports/ds-sdk/sdk/raw_sql_tpl"
  6. "git.sxidc.com/service-supports/ds-sdk/sdk/tag"
  7. "reflect"
  8. "strconv"
  9. "strings"
  10. "time"
  11. )
  12. type SqlExecutor interface {
  13. ExecuteRawSql(sql string, executeParams map[string]any) ([]map[string]any, error)
  14. ExecuteSql(name string, executeParams map[string]any) ([]map[string]any, error)
  15. }
  16. const (
  17. timeWriteFormat = time.DateTime + ".000000 +08:00"
  18. createdTimeFieldName = "CreatedTime"
  19. lastUpdatedTimeFieldName = "LastUpdatedTime"
  20. )
  21. type ValueCallback[T any] func(e T, fieldName string, value any) (retValue any, err error)
  22. type ConditionCallback[T any] func(e T, fieldName string, columnName string, value any) (retConditionOp string, retConditionValue any, err error)
  23. func Insert[T any](executor SqlExecutor, tableName string, e T, callback ValueCallback[T]) error {
  24. if executor == nil {
  25. return errors.New("没有传递执行器")
  26. }
  27. if strutils.IsStringEmpty(tableName) {
  28. return errors.New("没有传递表名")
  29. }
  30. if reflect.TypeOf(e) == nil {
  31. return errors.New("没有传递实体")
  32. }
  33. sqlMapping, err := tag.ParseSqlMapping(e)
  34. if err != nil {
  35. return err
  36. }
  37. executeParams := raw_sql_tpl.InsertExecuteParams{
  38. TableName: tableName,
  39. }
  40. now := time.Now()
  41. for fieldName, sqlMappingColumn := range sqlMapping.ColumnMap {
  42. fieldType := sqlMappingColumn.ValueFieldType
  43. value := reflect.Zero(fieldType).Interface()
  44. if !sqlMappingColumn.ValueFieldValue.IsZero() {
  45. value = sqlMappingColumn.ValueFieldValue.Interface()
  46. }
  47. if sqlMappingColumn.InsertCallback {
  48. if callback == nil {
  49. return errors.New("需要使用回调函数但是没有传递回调函数")
  50. }
  51. retValue, err := callback(e, fieldName, value)
  52. if err != nil {
  53. return err
  54. }
  55. retValueType := reflect.TypeOf(retValue)
  56. if retValueType == nil || retValueType.Kind() == reflect.Ptr {
  57. return errors.New("返回应当为值类型")
  58. }
  59. value = retValue
  60. }
  61. if (fieldName == createdTimeFieldName || fieldName == lastUpdatedTimeFieldName) &&
  62. fieldType.String() == "time.Time" && value.(time.Time).IsZero() {
  63. value = now
  64. }
  65. tableRowValue, err := parseValue(value)
  66. if err != nil {
  67. return err
  68. }
  69. executeParams.TableRows = append(executeParams.TableRows, raw_sql_tpl.TableRow{
  70. Column: sqlMappingColumn.Name,
  71. Value: tableRowValue,
  72. })
  73. }
  74. executeParamsMap, err := executeParams.Map()
  75. if err != nil {
  76. return err
  77. }
  78. _, err = executor.ExecuteRawSql(raw_sql_tpl.InsertTpl, executeParamsMap)
  79. if err != nil {
  80. if strings.Contains(err.Error(), "SQLSTATE 23505") {
  81. return ErrDBRecordHasExist
  82. }
  83. return err
  84. }
  85. return nil
  86. }
  87. func Delete[T any](executor SqlExecutor, tableName string, e T) error {
  88. if executor == nil {
  89. return errors.New("没有传递执行器")
  90. }
  91. if strutils.IsStringEmpty(tableName) {
  92. return errors.New("没有传递表名")
  93. }
  94. if reflect.TypeOf(e) == nil {
  95. return errors.New("没有传递实体")
  96. }
  97. sqlMapping, err := tag.ParseSqlMapping(e)
  98. if err != nil {
  99. return err
  100. }
  101. executeParams := raw_sql_tpl.DeleteExecuteParams{
  102. TableName: tableName,
  103. }
  104. for _, sqlMappingColumn := range sqlMapping.ColumnMap {
  105. if !sqlMappingColumn.IsKey {
  106. continue
  107. }
  108. fieldType := sqlMappingColumn.ValueFieldType
  109. value := reflect.Zero(fieldType).Interface()
  110. if !sqlMappingColumn.ValueFieldValue.IsZero() {
  111. value = sqlMappingColumn.ValueFieldValue.Interface()
  112. }
  113. tableRowValue, err := parseValue(value)
  114. if err != nil {
  115. return err
  116. }
  117. executeParams.Conditions = append(executeParams.Conditions, raw_sql_tpl.Condition{
  118. Column: sqlMappingColumn.Name,
  119. Operator: "=",
  120. Value: tableRowValue,
  121. })
  122. }
  123. executeParamsMap, err := executeParams.Map()
  124. if err != nil {
  125. return err
  126. }
  127. _, err = executor.ExecuteRawSql(raw_sql_tpl.DeleteTpl, executeParamsMap)
  128. if err != nil {
  129. return err
  130. }
  131. return nil
  132. }
  133. func Update[T any](executor SqlExecutor, tableName string, e T, callback ValueCallback[T]) error {
  134. if executor == nil {
  135. return errors.New("没有传递执行器")
  136. }
  137. if strutils.IsStringEmpty(tableName) {
  138. return errors.New("没有传递表名")
  139. }
  140. if reflect.TypeOf(e) == nil {
  141. return errors.New("没有传递实体")
  142. }
  143. sqlMapping, err := tag.ParseSqlMapping(e)
  144. if err != nil {
  145. return err
  146. }
  147. executeParams := raw_sql_tpl.UpdateExecuteParams{
  148. TableName: tableName,
  149. }
  150. now := time.Now()
  151. for fieldName, sqlMappingColumn := range sqlMapping.ColumnMap {
  152. if !sqlMappingColumn.CanUpdate {
  153. continue
  154. }
  155. fieldType := sqlMappingColumn.ValueFieldType
  156. value := reflect.Zero(fieldType).Interface()
  157. if !sqlMappingColumn.ValueFieldValue.IsZero() {
  158. value = sqlMappingColumn.ValueFieldValue.Interface()
  159. }
  160. if sqlMappingColumn.UpdateCallback {
  161. if callback == nil {
  162. return errors.New("需要使用回调函数但是没有传递回调函数")
  163. }
  164. retValue, err := callback(e, fieldName, value)
  165. if err != nil {
  166. return err
  167. }
  168. retValueType := reflect.TypeOf(retValue)
  169. if retValueType == nil || retValueType.Kind() == reflect.Ptr {
  170. return errors.New("返回应当为值类型")
  171. }
  172. value = retValue
  173. }
  174. if fieldName == lastUpdatedTimeFieldName &&
  175. fieldType.String() == "time.Time" && value.(time.Time).IsZero() {
  176. value = now
  177. }
  178. // 字段为空不更新
  179. if reflect.ValueOf(value).IsZero() && !sqlMappingColumn.CanUpdateClear {
  180. continue
  181. }
  182. tableRowValue, err := parseValue(value)
  183. if err != nil {
  184. return err
  185. }
  186. executeParams.TableRows = append(executeParams.TableRows, raw_sql_tpl.TableRow{
  187. Column: sqlMappingColumn.Name,
  188. Value: tableRowValue,
  189. })
  190. if sqlMappingColumn.IsKey {
  191. executeParams.Conditions = append(executeParams.Conditions, raw_sql_tpl.Condition{
  192. Column: sqlMappingColumn.Name,
  193. Operator: "=",
  194. Value: tableRowValue,
  195. })
  196. }
  197. }
  198. executeParamsMap, err := executeParams.Map()
  199. if err != nil {
  200. return err
  201. }
  202. _, err = executor.ExecuteRawSql(raw_sql_tpl.UpdateTpl, executeParamsMap)
  203. if err != nil {
  204. return err
  205. }
  206. return nil
  207. }
  208. func Query[T any](executor SqlExecutor, tableName string, e T, pageNo int, pageSize int, callback ConditionCallback[T]) ([]map[string]any, int64, error) {
  209. if executor == nil {
  210. return nil, 0, errors.New("没有传递执行器")
  211. }
  212. if strutils.IsStringEmpty(tableName) {
  213. return nil, 0, errors.New("没有传递表名")
  214. }
  215. if reflect.TypeOf(e) == nil {
  216. return nil, 0, errors.New("没有传递实体")
  217. }
  218. sqlMapping, err := tag.ParseSqlMapping(e)
  219. if err != nil {
  220. return nil, 0, err
  221. }
  222. var offset int
  223. var limit int
  224. if pageNo != 0 && pageSize != 0 {
  225. offset = (pageNo - 1) * pageSize
  226. limit = pageSize
  227. }
  228. executeParams := raw_sql_tpl.QueryExecuteParams{
  229. TableName: tableName,
  230. Limit: limit,
  231. Offset: offset,
  232. }
  233. countParams := raw_sql_tpl.CountExecuteParams{
  234. TableName: tableName,
  235. }
  236. for fieldName, sqlMappingColumn := range sqlMapping.ColumnMap {
  237. if !sqlMappingColumn.CanQuery {
  238. continue
  239. }
  240. fieldType := sqlMappingColumn.ValueFieldType
  241. conditionValue := reflect.Zero(fieldType).Interface()
  242. if !sqlMappingColumn.ValueFieldValue.IsZero() {
  243. conditionValue = sqlMappingColumn.ValueFieldValue.Interface()
  244. }
  245. conditionOp := "="
  246. if sqlMappingColumn.QueryCallback {
  247. if callback == nil {
  248. return nil, 0, errors.New("需要使用回调函数但是没有传递回调函数")
  249. }
  250. retConditionOp, retConditionValue, err := callback(e, fieldName, sqlMappingColumn.Name, conditionValue)
  251. if err != nil {
  252. return nil, 0, err
  253. }
  254. retValueType := reflect.TypeOf(retConditionValue)
  255. if retValueType == nil || retValueType.Kind() == reflect.Ptr {
  256. return nil, 0, errors.New("返回应当为值类型")
  257. }
  258. conditionValue = retConditionValue
  259. conditionOp = retConditionOp
  260. }
  261. // 字段为空不更新
  262. if reflect.ValueOf(conditionValue).IsZero() {
  263. continue
  264. }
  265. tableRowValue, err := parseValue(conditionValue)
  266. if err != nil {
  267. return nil, 0, err
  268. }
  269. executeParams.Conditions = append(executeParams.Conditions, raw_sql_tpl.Condition{
  270. Column: sqlMappingColumn.Name,
  271. Operator: conditionOp,
  272. Value: tableRowValue,
  273. })
  274. countParams.Conditions = append(countParams.Conditions, raw_sql_tpl.Condition{
  275. Column: sqlMappingColumn.Name,
  276. Operator: conditionOp,
  277. Value: tableRowValue,
  278. })
  279. }
  280. executeParamsMap, err := executeParams.Map()
  281. if err != nil {
  282. return nil, 0, err
  283. }
  284. countParamsMap, err := countParams.Map()
  285. if err != nil {
  286. return nil, 0, err
  287. }
  288. tableRows, err := executor.ExecuteRawSql(raw_sql_tpl.QueryTpl, executeParamsMap)
  289. if err != nil {
  290. return nil, 0, err
  291. }
  292. countTableRow, err := executor.ExecuteRawSql(raw_sql_tpl.CountTpl, countParamsMap)
  293. if err != nil {
  294. return nil, 0, err
  295. }
  296. return tableRows, int64(countTableRow[0]["count"].(float64)), nil
  297. }
  298. func QueryByKeys[T any](executor SqlExecutor, tableName string, e T) (map[string]any, error) {
  299. if executor == nil {
  300. return nil, errors.New("没有传递执行器")
  301. }
  302. if strutils.IsStringEmpty(tableName) {
  303. return nil, errors.New("没有传递表名")
  304. }
  305. if reflect.TypeOf(e) == nil {
  306. return nil, errors.New("没有传递实体")
  307. }
  308. sqlMapping, err := tag.ParseSqlMapping(e)
  309. if err != nil {
  310. return nil, err
  311. }
  312. executeParams := raw_sql_tpl.QueryExecuteParams{
  313. TableName: tableName,
  314. Limit: 0,
  315. Offset: 0,
  316. }
  317. for _, sqlMappingColumn := range sqlMapping.ColumnMap {
  318. if !sqlMappingColumn.IsKey {
  319. continue
  320. }
  321. fieldType := sqlMappingColumn.ValueFieldType
  322. conditionValue := reflect.Zero(fieldType).Interface()
  323. if !sqlMappingColumn.ValueFieldValue.IsZero() {
  324. conditionValue = sqlMappingColumn.ValueFieldValue.Interface()
  325. }
  326. tableRowValue, err := parseValue(conditionValue)
  327. if err != nil {
  328. return nil, err
  329. }
  330. executeParams.Conditions = append(executeParams.Conditions, raw_sql_tpl.Condition{
  331. Column: sqlMappingColumn.Name,
  332. Operator: "=",
  333. Value: tableRowValue,
  334. })
  335. }
  336. executeParamsMap, err := executeParams.Map()
  337. if err != nil {
  338. return nil, err
  339. }
  340. tableRows, err := executor.ExecuteRawSql(raw_sql_tpl.QueryTpl, executeParamsMap)
  341. if err != nil {
  342. return nil, err
  343. }
  344. if tableRows == nil || len(tableRows) == 0 {
  345. return nil, ErrDBRecordNotExist
  346. }
  347. return tableRows[0], nil
  348. }
  349. func Count[T any](executor SqlExecutor, tableName string, e T, callback ConditionCallback[T]) (int64, error) {
  350. if executor == nil {
  351. return 0, errors.New("没有传递执行器")
  352. }
  353. if strutils.IsStringEmpty(tableName) {
  354. return 0, errors.New("没有传递表名")
  355. }
  356. if reflect.TypeOf(e) == nil {
  357. return 0, errors.New("没有传递实体")
  358. }
  359. sqlMapping, err := tag.ParseSqlMapping(e)
  360. if err != nil {
  361. return 0, err
  362. }
  363. executeParams := raw_sql_tpl.CountExecuteParams{
  364. TableName: tableName,
  365. }
  366. for fieldName, sqlMappingColumn := range sqlMapping.ColumnMap {
  367. fieldType := sqlMappingColumn.ValueFieldType
  368. conditionValue := reflect.Zero(fieldType).Interface()
  369. if !sqlMappingColumn.ValueFieldValue.IsZero() {
  370. conditionValue = sqlMappingColumn.ValueFieldValue.Interface()
  371. }
  372. conditionOp := "="
  373. if sqlMappingColumn.CountCallback {
  374. if callback == nil {
  375. return 0, errors.New("需要使用回调函数但是没有传递回调函数")
  376. }
  377. retConditionOp, retConditionValue, err := callback(e, fieldName, sqlMappingColumn.Name, conditionValue)
  378. if err != nil {
  379. return 0, err
  380. }
  381. retValueType := reflect.TypeOf(retConditionValue)
  382. if retValueType == nil || retValueType.Kind() == reflect.Ptr {
  383. return 0, errors.New("返回应当为值类型")
  384. }
  385. conditionValue = retConditionValue
  386. conditionOp = retConditionOp
  387. }
  388. tableRowValue, err := parseValue(conditionValue)
  389. if err != nil {
  390. return 0, err
  391. }
  392. executeParams.Conditions = append(executeParams.Conditions, raw_sql_tpl.Condition{
  393. Column: sqlMappingColumn.Name,
  394. Operator: conditionOp,
  395. Value: tableRowValue,
  396. })
  397. }
  398. executeParamsMap, err := executeParams.Map()
  399. if err != nil {
  400. return 0, err
  401. }
  402. tableRows, err := executor.ExecuteRawSql(raw_sql_tpl.CountTpl, executeParamsMap)
  403. if err != nil {
  404. return 0, err
  405. }
  406. return int64(tableRows[0]["count"].(float64)), nil
  407. }
  408. func CheckExist[T any](executor SqlExecutor, tableName string, e T, callback ConditionCallback[T]) (bool, error) {
  409. if executor == nil {
  410. return false, errors.New("没有传递执行器")
  411. }
  412. if strutils.IsStringEmpty(tableName) {
  413. return false, errors.New("没有传递表名")
  414. }
  415. if reflect.TypeOf(e) == nil {
  416. return false, errors.New("没有传递实体")
  417. }
  418. sqlMapping, err := tag.ParseSqlMapping(e)
  419. if err != nil {
  420. return false, err
  421. }
  422. executeParams := raw_sql_tpl.CountExecuteParams{
  423. TableName: tableName,
  424. }
  425. for fieldName, sqlMappingColumn := range sqlMapping.ColumnMap {
  426. fieldType := sqlMappingColumn.ValueFieldType
  427. conditionValue := reflect.Zero(fieldType).Interface()
  428. if !sqlMappingColumn.ValueFieldValue.IsZero() {
  429. conditionValue = sqlMappingColumn.ValueFieldValue.Interface()
  430. }
  431. conditionOp := "="
  432. if sqlMappingColumn.CheckExistCallback {
  433. if callback == nil {
  434. return false, errors.New("需要使用回调函数但是没有传递回调函数")
  435. }
  436. retConditionOp, retConditionValue, err := callback(e, fieldName, sqlMappingColumn.Name, conditionValue)
  437. if err != nil {
  438. return false, err
  439. }
  440. retValueType := reflect.TypeOf(retConditionValue)
  441. if retValueType == nil || retValueType.Kind() == reflect.Ptr {
  442. return false, errors.New("返回应当为值类型")
  443. }
  444. conditionValue = retConditionValue
  445. conditionOp = retConditionOp
  446. }
  447. tableRowValue, err := parseValue(conditionValue)
  448. if err != nil {
  449. return false, err
  450. }
  451. executeParams.Conditions = append(executeParams.Conditions, raw_sql_tpl.Condition{
  452. Column: sqlMappingColumn.Name,
  453. Operator: conditionOp,
  454. Value: tableRowValue,
  455. })
  456. }
  457. executeParamsMap, err := executeParams.Map()
  458. if err != nil {
  459. return false, err
  460. }
  461. tableRows, err := executor.ExecuteRawSql(raw_sql_tpl.CountTpl, executeParamsMap)
  462. if err != nil {
  463. return false, err
  464. }
  465. return int64(tableRows[0]["count"].(float64)) > 0, nil
  466. }
  467. func CheckExistByKey[T any](executor SqlExecutor, tableName string, e T) (bool, error) {
  468. if executor == nil {
  469. return false, errors.New("没有传递执行器")
  470. }
  471. if strutils.IsStringEmpty(tableName) {
  472. return false, errors.New("没有传递表名")
  473. }
  474. if reflect.TypeOf(e) == nil {
  475. return false, errors.New("没有传递实体")
  476. }
  477. sqlMapping, err := tag.ParseSqlMapping(e)
  478. if err != nil {
  479. return false, err
  480. }
  481. executeParams := raw_sql_tpl.CountExecuteParams{
  482. TableName: tableName,
  483. }
  484. for _, sqlMappingColumn := range sqlMapping.ColumnMap {
  485. if !sqlMappingColumn.IsKey {
  486. continue
  487. }
  488. fieldType := sqlMappingColumn.ValueFieldType
  489. conditionValue := reflect.Zero(fieldType).Interface()
  490. if !sqlMappingColumn.ValueFieldValue.IsZero() {
  491. conditionValue = sqlMappingColumn.ValueFieldValue.Interface()
  492. }
  493. tableRowValue, err := parseValue(conditionValue)
  494. if err != nil {
  495. return false, err
  496. }
  497. executeParams.Conditions = append(executeParams.Conditions, raw_sql_tpl.Condition{
  498. Column: sqlMappingColumn.Name,
  499. Operator: "=",
  500. Value: tableRowValue,
  501. })
  502. }
  503. executeParamsMap, err := executeParams.Map()
  504. if err != nil {
  505. return false, err
  506. }
  507. tableRows, err := executor.ExecuteRawSql(raw_sql_tpl.CountTpl, executeParamsMap)
  508. if err != nil {
  509. return false, err
  510. }
  511. return int64(tableRows[0]["count"].(float64)) > 0, nil
  512. }
  513. func CheckHasOnlyOne[T any](executor SqlExecutor, tableName string, e T, callback ConditionCallback[T]) (bool, error) {
  514. if executor == nil {
  515. return false, errors.New("没有传递执行器")
  516. }
  517. if strutils.IsStringEmpty(tableName) {
  518. return false, errors.New("没有传递表名")
  519. }
  520. if reflect.TypeOf(e) == nil {
  521. return false, errors.New("没有传递实体")
  522. }
  523. sqlMapping, err := tag.ParseSqlMapping(e)
  524. if err != nil {
  525. return false, err
  526. }
  527. executeParams := raw_sql_tpl.CountExecuteParams{
  528. TableName: tableName,
  529. }
  530. for fieldName, sqlMappingColumn := range sqlMapping.ColumnMap {
  531. fieldType := sqlMappingColumn.ValueFieldType
  532. conditionValue := reflect.Zero(fieldType).Interface()
  533. if !sqlMappingColumn.ValueFieldValue.IsZero() {
  534. conditionValue = sqlMappingColumn.ValueFieldValue.Interface()
  535. }
  536. conditionOp := "="
  537. if sqlMappingColumn.QueryCallback {
  538. if callback == nil {
  539. return false, errors.New("需要使用回调函数但是没有传递回调函数")
  540. }
  541. retConditionOp, retConditionValue, err := callback(e, fieldName, sqlMappingColumn.Name, conditionValue)
  542. if err != nil {
  543. return false, err
  544. }
  545. retValueType := reflect.TypeOf(retConditionValue)
  546. if retValueType == nil || retValueType.Kind() == reflect.Ptr {
  547. return false, errors.New("返回应当为值类型")
  548. }
  549. conditionValue = retConditionValue
  550. conditionOp = retConditionOp
  551. }
  552. tableRowValue, err := parseValue(conditionValue)
  553. if err != nil {
  554. return false, err
  555. }
  556. executeParams.Conditions = append(executeParams.Conditions, raw_sql_tpl.Condition{
  557. Column: sqlMappingColumn.Name,
  558. Operator: conditionOp,
  559. Value: tableRowValue,
  560. })
  561. }
  562. executeParamsMap, err := executeParams.Map()
  563. if err != nil {
  564. return false, err
  565. }
  566. tableRows, err := executor.ExecuteRawSql(raw_sql_tpl.CountTpl, executeParamsMap)
  567. if err != nil {
  568. return false, err
  569. }
  570. return int64(tableRows[0]["count"].(float64)) == 1, nil
  571. }
  572. func ExecuteRawSql(executor SqlExecutor, sql string, executeParams map[string]any) ([]map[string]any, error) {
  573. if executor == nil {
  574. return nil, errors.New("没有传递执行器")
  575. }
  576. if strutils.IsStringEmpty(sql) {
  577. return nil, errors.New("没有sql")
  578. }
  579. tableRows, err := executor.ExecuteRawSql(sql, executeParams)
  580. if err != nil {
  581. return nil, err
  582. }
  583. return tableRows, nil
  584. }
  585. func ExecuteSql(executor SqlExecutor, name string, executeParams map[string]any) ([]map[string]any, error) {
  586. if executor == nil {
  587. return nil, errors.New("没有传递执行器")
  588. }
  589. if strutils.IsStringEmpty(name) {
  590. return nil, errors.New("没有sql资源名称")
  591. }
  592. tableRows, err := executor.ExecuteSql(name, executeParams)
  593. if err != nil {
  594. return nil, err
  595. }
  596. return tableRows, nil
  597. }
  598. func parseValue(value any) (string, error) {
  599. switch v := value.(type) {
  600. case string:
  601. return "'" + v + "'", nil
  602. case bool:
  603. return strconv.FormatBool(v), nil
  604. case time.Time:
  605. return "'" + v.Format(timeWriteFormat) + "'", nil
  606. case int:
  607. return strconv.Itoa(v), nil
  608. case int8:
  609. return strconv.FormatInt(int64(v), 10), nil
  610. case int16:
  611. return strconv.FormatInt(int64(v), 10), nil
  612. case int32:
  613. return strconv.FormatInt(int64(v), 10), nil
  614. case int64:
  615. return strconv.FormatInt(v, 10), nil
  616. case uint:
  617. return strconv.FormatUint(uint64(v), 10), nil
  618. case uint8:
  619. return strconv.FormatUint(uint64(v), 10), nil
  620. case uint16:
  621. return strconv.FormatUint(uint64(v), 10), nil
  622. case uint32:
  623. return strconv.FormatUint(uint64(v), 10), nil
  624. case uint64:
  625. return strconv.FormatUint(v, 10), nil
  626. default:
  627. return "", errors.New("不支持的类型")
  628. }
  629. }