sql.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792
  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. tableRowValue, err := parseValue(conditionValue)
  262. if err != nil {
  263. return nil, 0, err
  264. }
  265. executeParams.Conditions = append(executeParams.Conditions, raw_sql_tpl.Condition{
  266. Column: sqlMappingColumn.Name,
  267. Operator: conditionOp,
  268. Value: tableRowValue,
  269. })
  270. countParams.Conditions = append(countParams.Conditions, raw_sql_tpl.Condition{
  271. Column: sqlMappingColumn.Name,
  272. Operator: conditionOp,
  273. Value: tableRowValue,
  274. })
  275. }
  276. executeParamsMap, err := executeParams.Map()
  277. if err != nil {
  278. return nil, 0, err
  279. }
  280. countParamsMap, err := countParams.Map()
  281. if err != nil {
  282. return nil, 0, err
  283. }
  284. tableRows, err := executor.ExecuteRawSql(raw_sql_tpl.QueryTpl, executeParamsMap)
  285. if err != nil {
  286. return nil, 0, err
  287. }
  288. countTableRow, err := executor.ExecuteRawSql(raw_sql_tpl.CountTpl, countParamsMap)
  289. if err != nil {
  290. return nil, 0, err
  291. }
  292. return tableRows, int64(countTableRow[0]["count"].(float64)), nil
  293. }
  294. func QueryByKeys[T any](executor SqlExecutor, tableName string, e T) (map[string]any, error) {
  295. if executor == nil {
  296. return nil, errors.New("没有传递执行器")
  297. }
  298. if strutils.IsStringEmpty(tableName) {
  299. return nil, errors.New("没有传递表名")
  300. }
  301. if reflect.TypeOf(e) == nil {
  302. return nil, errors.New("没有传递实体")
  303. }
  304. sqlMapping, err := tag.ParseSqlMapping(e)
  305. if err != nil {
  306. return nil, err
  307. }
  308. executeParams := raw_sql_tpl.QueryExecuteParams{
  309. TableName: tableName,
  310. Limit: 0,
  311. Offset: 0,
  312. }
  313. for _, sqlMappingColumn := range sqlMapping.ColumnMap {
  314. if !sqlMappingColumn.IsKey {
  315. continue
  316. }
  317. fieldType := sqlMappingColumn.ValueFieldType
  318. conditionValue := reflect.Zero(fieldType).Interface()
  319. if !sqlMappingColumn.ValueFieldValue.IsZero() {
  320. conditionValue = sqlMappingColumn.ValueFieldValue.Interface()
  321. }
  322. tableRowValue, err := parseValue(conditionValue)
  323. if err != nil {
  324. return nil, err
  325. }
  326. executeParams.Conditions = append(executeParams.Conditions, raw_sql_tpl.Condition{
  327. Column: sqlMappingColumn.Name,
  328. Operator: "=",
  329. Value: tableRowValue,
  330. })
  331. }
  332. executeParamsMap, err := executeParams.Map()
  333. if err != nil {
  334. return nil, err
  335. }
  336. tableRows, err := executor.ExecuteRawSql(raw_sql_tpl.QueryTpl, executeParamsMap)
  337. if err != nil {
  338. return nil, err
  339. }
  340. if tableRows == nil || len(tableRows) == 0 {
  341. return nil, ErrDBRecordNotExist
  342. }
  343. return tableRows[0], nil
  344. }
  345. func Count[T any](executor SqlExecutor, tableName string, e T, callback ConditionCallback[T]) (int64, error) {
  346. if executor == nil {
  347. return 0, errors.New("没有传递执行器")
  348. }
  349. if strutils.IsStringEmpty(tableName) {
  350. return 0, errors.New("没有传递表名")
  351. }
  352. if reflect.TypeOf(e) == nil {
  353. return 0, errors.New("没有传递实体")
  354. }
  355. sqlMapping, err := tag.ParseSqlMapping(e)
  356. if err != nil {
  357. return 0, err
  358. }
  359. executeParams := raw_sql_tpl.CountExecuteParams{
  360. TableName: tableName,
  361. }
  362. for fieldName, sqlMappingColumn := range sqlMapping.ColumnMap {
  363. fieldType := sqlMappingColumn.ValueFieldType
  364. conditionValue := reflect.Zero(fieldType).Interface()
  365. if !sqlMappingColumn.ValueFieldValue.IsZero() {
  366. conditionValue = sqlMappingColumn.ValueFieldValue.Interface()
  367. }
  368. conditionOp := "="
  369. if sqlMappingColumn.CountCallback {
  370. if callback == nil {
  371. return 0, errors.New("需要使用回调函数但是没有传递回调函数")
  372. }
  373. retConditionOp, retConditionValue, err := callback(e, fieldName, sqlMappingColumn.Name, conditionValue)
  374. if err != nil {
  375. return 0, err
  376. }
  377. retValueType := reflect.TypeOf(retConditionValue)
  378. if retValueType == nil || retValueType.Kind() == reflect.Ptr {
  379. return 0, errors.New("返回应当为值类型")
  380. }
  381. conditionValue = retConditionValue
  382. conditionOp = retConditionOp
  383. }
  384. tableRowValue, err := parseValue(conditionValue)
  385. if err != nil {
  386. return 0, err
  387. }
  388. executeParams.Conditions = append(executeParams.Conditions, raw_sql_tpl.Condition{
  389. Column: sqlMappingColumn.Name,
  390. Operator: conditionOp,
  391. Value: tableRowValue,
  392. })
  393. }
  394. executeParamsMap, err := executeParams.Map()
  395. if err != nil {
  396. return 0, err
  397. }
  398. tableRows, err := executor.ExecuteRawSql(raw_sql_tpl.CountTpl, executeParamsMap)
  399. if err != nil {
  400. return 0, err
  401. }
  402. return int64(tableRows[0]["count"].(float64)), nil
  403. }
  404. func CheckExist[T any](executor SqlExecutor, tableName string, e T, callback ConditionCallback[T]) (bool, error) {
  405. if executor == nil {
  406. return false, errors.New("没有传递执行器")
  407. }
  408. if strutils.IsStringEmpty(tableName) {
  409. return false, errors.New("没有传递表名")
  410. }
  411. if reflect.TypeOf(e) == nil {
  412. return false, errors.New("没有传递实体")
  413. }
  414. sqlMapping, err := tag.ParseSqlMapping(e)
  415. if err != nil {
  416. return false, err
  417. }
  418. executeParams := raw_sql_tpl.CountExecuteParams{
  419. TableName: tableName,
  420. }
  421. for fieldName, sqlMappingColumn := range sqlMapping.ColumnMap {
  422. fieldType := sqlMappingColumn.ValueFieldType
  423. conditionValue := reflect.Zero(fieldType).Interface()
  424. if !sqlMappingColumn.ValueFieldValue.IsZero() {
  425. conditionValue = sqlMappingColumn.ValueFieldValue.Interface()
  426. }
  427. conditionOp := "="
  428. if sqlMappingColumn.CheckExistCallback {
  429. if callback == nil {
  430. return false, errors.New("需要使用回调函数但是没有传递回调函数")
  431. }
  432. retConditionOp, retConditionValue, err := callback(e, fieldName, sqlMappingColumn.Name, conditionValue)
  433. if err != nil {
  434. return false, err
  435. }
  436. retValueType := reflect.TypeOf(retConditionValue)
  437. if retValueType == nil || retValueType.Kind() == reflect.Ptr {
  438. return false, errors.New("返回应当为值类型")
  439. }
  440. conditionValue = retConditionValue
  441. conditionOp = retConditionOp
  442. }
  443. tableRowValue, err := parseValue(conditionValue)
  444. if err != nil {
  445. return false, err
  446. }
  447. executeParams.Conditions = append(executeParams.Conditions, raw_sql_tpl.Condition{
  448. Column: sqlMappingColumn.Name,
  449. Operator: conditionOp,
  450. Value: tableRowValue,
  451. })
  452. }
  453. executeParamsMap, err := executeParams.Map()
  454. if err != nil {
  455. return false, err
  456. }
  457. tableRows, err := executor.ExecuteRawSql(raw_sql_tpl.CountTpl, executeParamsMap)
  458. if err != nil {
  459. return false, err
  460. }
  461. return int64(tableRows[0]["count"].(float64)) > 0, nil
  462. }
  463. func CheckExistByKey[T any](executor SqlExecutor, tableName string, e T) (bool, error) {
  464. if executor == nil {
  465. return false, errors.New("没有传递执行器")
  466. }
  467. if strutils.IsStringEmpty(tableName) {
  468. return false, errors.New("没有传递表名")
  469. }
  470. if reflect.TypeOf(e) == nil {
  471. return false, errors.New("没有传递实体")
  472. }
  473. sqlMapping, err := tag.ParseSqlMapping(e)
  474. if err != nil {
  475. return false, err
  476. }
  477. executeParams := raw_sql_tpl.CountExecuteParams{
  478. TableName: tableName,
  479. }
  480. for _, sqlMappingColumn := range sqlMapping.ColumnMap {
  481. if !sqlMappingColumn.IsKey {
  482. continue
  483. }
  484. fieldType := sqlMappingColumn.ValueFieldType
  485. conditionValue := reflect.Zero(fieldType).Interface()
  486. if !sqlMappingColumn.ValueFieldValue.IsZero() {
  487. conditionValue = sqlMappingColumn.ValueFieldValue.Interface()
  488. }
  489. tableRowValue, err := parseValue(conditionValue)
  490. if err != nil {
  491. return false, err
  492. }
  493. executeParams.Conditions = append(executeParams.Conditions, raw_sql_tpl.Condition{
  494. Column: sqlMappingColumn.Name,
  495. Operator: "=",
  496. Value: tableRowValue,
  497. })
  498. }
  499. executeParamsMap, err := executeParams.Map()
  500. if err != nil {
  501. return false, err
  502. }
  503. tableRows, err := executor.ExecuteRawSql(raw_sql_tpl.CountTpl, executeParamsMap)
  504. if err != nil {
  505. return false, err
  506. }
  507. return int64(tableRows[0]["count"].(float64)) > 0, nil
  508. }
  509. func CheckHasOnlyOne[T any](executor SqlExecutor, tableName string, e T, callback ConditionCallback[T]) (bool, error) {
  510. if executor == nil {
  511. return false, errors.New("没有传递执行器")
  512. }
  513. if strutils.IsStringEmpty(tableName) {
  514. return false, errors.New("没有传递表名")
  515. }
  516. if reflect.TypeOf(e) == nil {
  517. return false, errors.New("没有传递实体")
  518. }
  519. sqlMapping, err := tag.ParseSqlMapping(e)
  520. if err != nil {
  521. return false, err
  522. }
  523. executeParams := raw_sql_tpl.CountExecuteParams{
  524. TableName: tableName,
  525. }
  526. for fieldName, sqlMappingColumn := range sqlMapping.ColumnMap {
  527. fieldType := sqlMappingColumn.ValueFieldType
  528. conditionValue := reflect.Zero(fieldType).Interface()
  529. if !sqlMappingColumn.ValueFieldValue.IsZero() {
  530. conditionValue = sqlMappingColumn.ValueFieldValue.Interface()
  531. }
  532. conditionOp := "="
  533. if sqlMappingColumn.QueryCallback {
  534. if callback == nil {
  535. return false, errors.New("需要使用回调函数但是没有传递回调函数")
  536. }
  537. retConditionOp, retConditionValue, err := callback(e, fieldName, sqlMappingColumn.Name, conditionValue)
  538. if err != nil {
  539. return false, err
  540. }
  541. retValueType := reflect.TypeOf(retConditionValue)
  542. if retValueType == nil || retValueType.Kind() == reflect.Ptr {
  543. return false, errors.New("返回应当为值类型")
  544. }
  545. conditionValue = retConditionValue
  546. conditionOp = retConditionOp
  547. }
  548. tableRowValue, err := parseValue(conditionValue)
  549. if err != nil {
  550. return false, err
  551. }
  552. executeParams.Conditions = append(executeParams.Conditions, raw_sql_tpl.Condition{
  553. Column: sqlMappingColumn.Name,
  554. Operator: conditionOp,
  555. Value: tableRowValue,
  556. })
  557. }
  558. executeParamsMap, err := executeParams.Map()
  559. if err != nil {
  560. return false, err
  561. }
  562. tableRows, err := executor.ExecuteRawSql(raw_sql_tpl.CountTpl, executeParamsMap)
  563. if err != nil {
  564. return false, err
  565. }
  566. return int64(tableRows[0]["count"].(float64)) == 1, nil
  567. }
  568. func ExecuteRawSql(executor SqlExecutor, sql string, executeParams map[string]any) ([]map[string]any, error) {
  569. if executor == nil {
  570. return nil, errors.New("没有传递执行器")
  571. }
  572. if strutils.IsStringEmpty(sql) {
  573. return nil, errors.New("没有sql")
  574. }
  575. tableRows, err := executor.ExecuteRawSql(sql, executeParams)
  576. if err != nil {
  577. return nil, err
  578. }
  579. return tableRows, nil
  580. }
  581. func ExecuteSql(executor SqlExecutor, name string, executeParams map[string]any) ([]map[string]any, error) {
  582. if executor == nil {
  583. return nil, errors.New("没有传递执行器")
  584. }
  585. if strutils.IsStringEmpty(name) {
  586. return nil, errors.New("没有sql资源名称")
  587. }
  588. tableRows, err := executor.ExecuteSql(name, executeParams)
  589. if err != nil {
  590. return nil, err
  591. }
  592. return tableRows, nil
  593. }
  594. func parseValue(value any) (string, error) {
  595. switch v := value.(type) {
  596. case string:
  597. return "'" + v + "'", nil
  598. case bool:
  599. return strconv.FormatBool(v), nil
  600. case time.Time:
  601. return "'" + v.Format(timeWriteFormat) + "'", nil
  602. case int:
  603. return strconv.Itoa(v), nil
  604. case int8:
  605. return strconv.FormatInt(int64(v), 10), nil
  606. case int16:
  607. return strconv.FormatInt(int64(v), 10), nil
  608. case int32:
  609. return strconv.FormatInt(int64(v), 10), nil
  610. case int64:
  611. return strconv.FormatInt(v, 10), nil
  612. case uint:
  613. return strconv.FormatUint(uint64(v), 10), nil
  614. case uint8:
  615. return strconv.FormatUint(uint64(v), 10), nil
  616. case uint16:
  617. return strconv.FormatUint(uint64(v), 10), nil
  618. case uint32:
  619. return strconv.FormatUint(uint64(v), 10), nil
  620. case uint64:
  621. return strconv.FormatUint(v, 10), nil
  622. default:
  623. return "", errors.New("不支持的类型")
  624. }
  625. }