数据库操作
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

892 lines
20 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. package dbquery
  2. import (
  3. "database/sql"
  4. "errors"
  5. "log"
  6. "strconv"
  7. "strings"
  8. "git.tetele.net/tgo/helper"
  9. )
  10. var stmt *sql.Stmt
  11. var err error
  12. type Query struct {
  13. dbname string
  14. table string
  15. alias string
  16. title string
  17. where []string
  18. where_or []string
  19. join [][]string //[["tablea as a","a.id=b.id","left"]]
  20. save_data []map[string]interface{} //批量操作的数据[["title":"a","num":1,],["title":"a","num":1,]]
  21. upd_field []string // 批量更新时需要更新的字段,为空时按除id外的字段进行更新
  22. data []string
  23. value []interface{}
  24. orderby string
  25. groupby string
  26. having string
  27. page int
  28. page_size int
  29. stmt *sql.Stmt
  30. conn *sql.DB
  31. debug bool
  32. dbtype string
  33. }
  34. func NewQuery(t ...string) *Query {
  35. var conn_type *sql.DB = DB
  36. var db_type string = "mysql"
  37. if len(t) > 0 {
  38. switch t[0] {
  39. case "mysql":
  40. conn_type = DB
  41. db_type = "mysql"
  42. case "mssql": //sql server
  43. conn_type = MSDB_CONN
  44. db_type = "mssql"
  45. }
  46. }
  47. return &Query{
  48. conn: conn_type,
  49. dbtype: db_type,
  50. }
  51. }
  52. func (this *Query) Conn(conn *sql.DB) *Query {
  53. this.conn = conn
  54. return this
  55. }
  56. func (this *Query) Db(dbname string) *Query {
  57. this.dbname = dbname
  58. return this
  59. }
  60. func (this *Query) Table(tablename string) *Query {
  61. this.table = tablename
  62. return this
  63. }
  64. func (this *Query) Alias(tablename string) *Query {
  65. this.alias = tablename
  66. return this
  67. }
  68. func (this *Query) Title(title string) *Query {
  69. this.title = title
  70. return this
  71. }
  72. func (this *Query) Page(page int) *Query {
  73. this.page = page
  74. return this
  75. }
  76. func (this *Query) PageSize(page_num int) *Query {
  77. this.page_size = page_num
  78. return this
  79. }
  80. func (this *Query) Having(having string) *Query {
  81. this.having = having
  82. return this
  83. }
  84. func (this *Query) Orderby(orderby string) *Query {
  85. this.orderby = orderby
  86. return this
  87. }
  88. func (this *Query) Groupby(groupby string) *Query {
  89. this.groupby = groupby
  90. return this
  91. }
  92. func (this *Query) Where(where string) *Query {
  93. this.where = append(this.where, where)
  94. return this
  95. }
  96. func (this *Query) Wheres(wheres []string) *Query {
  97. if len(wheres) > 0 {
  98. this.where = append(this.where, wheres...)
  99. }
  100. return this
  101. }
  102. func (this *Query) WhereOr(where string) *Query {
  103. this.where_or = append(this.where_or, where)
  104. return this
  105. }
  106. func (this *Query) SaveData(value map[string]interface{}) *Query {
  107. this.save_data = append(this.save_data, value)
  108. return this
  109. }
  110. func (this *Query) SaveDatas(value []map[string]interface{}) *Query {
  111. this.save_data = append(this.save_data, value...)
  112. return this
  113. }
  114. func (this *Query) UpdField(value string) *Query {
  115. this.upd_field = append(this.upd_field, value)
  116. return this
  117. }
  118. func (this *Query) UpdFields(value []string) *Query {
  119. this.upd_field = append(this.upd_field, value...)
  120. return this
  121. }
  122. func (this *Query) Value(value interface{}) *Query {
  123. this.value = append(this.value, value)
  124. return this
  125. }
  126. func (this *Query) Values(values []interface{}) *Query {
  127. this.value = append(this.value, values...)
  128. return this
  129. }
  130. func (this *Query) Join(join []string) *Query {
  131. this.join = append(this.join, join)
  132. return this
  133. }
  134. /**
  135. * 左连接
  136. * 2023/08/10
  137. * gz
  138. */
  139. func (this *Query) LeftJoin(table_name string, condition string) *Query {
  140. this.join = append(this.join, []string{table_name, condition, "left"})
  141. return this
  142. }
  143. /**
  144. * 右连接
  145. * 2023/08/10
  146. * gz
  147. */
  148. func (this *Query) RightJoin(table_name string, condition string) *Query {
  149. this.join = append(this.join, []string{table_name, condition, "right"})
  150. return this
  151. }
  152. func (this *Query) Data(data string) *Query {
  153. this.data = append(this.data, data)
  154. return this
  155. }
  156. func (this *Query) Datas(datas []string) *Query {
  157. this.data = append(this.data, datas...)
  158. return this
  159. }
  160. func (this *Query) Debug(debug bool) *Query {
  161. this.debug = debug
  162. return this
  163. }
  164. /*
  165. * 清理上次查询
  166. */
  167. func (this *Query) Clean() *Query {
  168. this.title = ""
  169. this.where = this.where[0:0]
  170. this.where_or = this.where_or[0:0]
  171. this.join = this.join[0:0]
  172. this.data = this.data[0:0]
  173. this.value = this.value[0:0]
  174. this.orderby = ""
  175. this.groupby = ""
  176. this.page = 0
  177. this.page_size = 0
  178. this.save_data = this.save_data[0:0]
  179. this.upd_field = this.upd_field[0:0]
  180. this.having = ""
  181. this.alias = ""
  182. return this
  183. }
  184. // 获取表格信息
  185. func (this *Query) GetTableInfo(table string) (map[string]interface{}, error) {
  186. field := []string{
  187. "COLUMN_NAME", //字段名
  188. "COLUMN_DEFAULT", //默认值
  189. "DATA_TYPE", //数据类型
  190. "COLUMN_TYPE", //数据类型+长度
  191. "COLUMN_COMMENT", //备注
  192. "IS_NULLABLE", //是否为空
  193. }
  194. sql := "select `" + strings.Join(field, "`,`") + "` from information_schema.COLUMNS where table_name = ? and table_schema = ?"
  195. if this.conn == nil {
  196. this.conn = DB
  197. }
  198. stmtSql, err := this.conn.Prepare(sql)
  199. if err != nil {
  200. return nil, err
  201. }
  202. list, err := StmtForQueryList(stmtSql, []interface{}{table, this.dbname})
  203. if err != nil {
  204. return nil, err
  205. }
  206. rows := make([]interface{}, 0, len(list))
  207. fieldName := make([]string, 0, len(list))
  208. for _, item := range list {
  209. info := map[string]interface{}{
  210. "name": "",
  211. "column_type": "",
  212. "is_null": true,
  213. "data_type": "",
  214. "comment": "",
  215. "default": "",
  216. }
  217. for _, k := range field {
  218. index := helper.StrFirstToUpper(k)
  219. if v, ok := item[index]; ok {
  220. switch k {
  221. case "COLUMN_NAME":
  222. info["name"] = v
  223. case "COLUMN_DEFAULT":
  224. info["default"] = v
  225. case "DATA_TYPE":
  226. info["data_type"] = v
  227. case "COLUMN_TYPE":
  228. info["column_type"] = helper.ToInt64(v)
  229. case "COLUMN_COMMENT":
  230. info["comment"] = helper.ToInt64(v)
  231. case "IS_NULLABLE":
  232. if v == "NO" {
  233. info["is_null"] = false
  234. }
  235. }
  236. }
  237. }
  238. name := helper.ToStr(info["name"])
  239. if name != "" {
  240. rows = append(rows, info)
  241. fieldName = append(fieldName, name)
  242. }
  243. }
  244. return map[string]interface{}{
  245. "field": fieldName,
  246. "list": rows,
  247. }, nil
  248. }
  249. // 返回表名
  250. func (this *Query) GetTableName(table string) string {
  251. return getTableName(this.dbname, table)
  252. }
  253. // 构造子查询
  254. func (this *Query) BuildSelectSql() (map[string]interface{}, error) {
  255. if this.dbname == "" && this.table == "" {
  256. return nil, errors.New("参数错误,没有数据表")
  257. }
  258. var table = ""
  259. if strings.Contains(this.table, "select ") {
  260. table = this.table
  261. } else {
  262. table = getTableName(this.dbname, this.table, this.dbtype)
  263. }
  264. // var err error
  265. var sql, title string
  266. if this.title != "" {
  267. title = this.title
  268. } else {
  269. title = "*"
  270. }
  271. if this.dbtype == "mssql" {
  272. if this.page_size > 0 {
  273. sql = helper.StringJoin("select top ", helper.ToStr(this.page_size), " ")
  274. } else {
  275. sql = "select "
  276. }
  277. } else {
  278. if DB_PROVIDER == "TencentDB" {
  279. sql = "/*slave*/ select "
  280. } else {
  281. sql = "select "
  282. }
  283. }
  284. sql = helper.StringJoin(sql, title)
  285. if this.alias != "" {
  286. table = helper.StringJoin(table, " as ", this.alias)
  287. }
  288. sql = helper.StringJoin(sql, " from ", table)
  289. if len(this.join) > 0 {
  290. join_type := "left"
  291. for _, joinitem := range this.join {
  292. if len(joinitem) < 2 {
  293. continue
  294. }
  295. if len(joinitem) == 3 {
  296. join_type = joinitem[2]
  297. } else { //默认左连接
  298. join_type = "left"
  299. }
  300. sql = helper.StringJoin(sql, " ", join_type, " join ", getTableName(this.dbname, joinitem[0], this.dbtype), " on ", joinitem[1])
  301. }
  302. }
  303. if len(this.where) > 0 || len(this.where_or) > 0 {
  304. sql = helper.StringJoin(sql, " where ")
  305. }
  306. if len(this.where) > 0 {
  307. sql = helper.StringJoin(sql, " (", strings.Join(this.where, " and "), " ) ")
  308. }
  309. if len(this.where_or) > 0 {
  310. if len(this.where) > 0 {
  311. sql = helper.StringJoin(sql, " or ", strings.Join(this.where_or, " or "))
  312. } else {
  313. sql = helper.StringJoin(sql, strings.Join(this.where_or, " or "))
  314. }
  315. }
  316. if this.groupby != "" {
  317. sql = helper.StringJoin(sql, " group by ", this.groupby)
  318. }
  319. if this.having != "" {
  320. sql = helper.StringJoin(sql, " having ", this.having)
  321. }
  322. if this.orderby != "" {
  323. sql = helper.StringJoin(sql, " order by ", this.orderby)
  324. }
  325. if this.dbtype == "mysql" && (this.page > 0 || this.page_size > 0) {
  326. if this.page < 1 {
  327. this.page = 1
  328. }
  329. if this.page_size < 1 {
  330. this.page_size = 10
  331. }
  332. from := strconv.Itoa((this.page - 1) * this.page_size)
  333. offset := strconv.Itoa(this.page_size)
  334. if from != "" && offset != "" {
  335. sql = helper.StringJoin(sql, " limit ", from, " , ", offset)
  336. }
  337. }
  338. if this.debug {
  339. log.Println("query sql:", sql, this.value)
  340. }
  341. condition_len := 0 //所有条件数
  342. for _, ch2 := range sql {
  343. if string(ch2) == "?" {
  344. condition_len++
  345. }
  346. }
  347. if condition_len != len(this.value) {
  348. return nil, errors.New("参数错误,条件值错误")
  349. }
  350. return map[string]interface{}{
  351. "sql": sql,
  352. "value": this.value,
  353. }, nil
  354. }
  355. // 拼查询sql
  356. func (this *Query) QueryStmt() error {
  357. res := map[string]interface{}{}
  358. res, err = this.BuildSelectSql()
  359. if err != nil {
  360. return err
  361. }
  362. sql := helper.ToStr(res["sql"])
  363. if SLAVER_DB != nil {
  364. this.conn = SLAVER_DB
  365. }
  366. // else {
  367. // this.conn = DB
  368. // }
  369. if this.conn == nil {
  370. this.conn = DB
  371. }
  372. stmt, err = this.conn.Prepare(sql)
  373. if err != nil {
  374. return err
  375. }
  376. this.stmt = stmt
  377. return nil
  378. }
  379. // 拼更新sql
  380. func (this *Query) UpdateStmt() error {
  381. if this.dbname == "" && this.table == "" {
  382. return errors.New("参数错误,没有数据表")
  383. }
  384. if len(this.where) < 1 {
  385. return errors.New("参数错误,缺少条件")
  386. }
  387. dbName := getTableName(this.dbname, this.table, this.dbtype)
  388. var sql string
  389. sql = helper.StringJoin("update ", dbName, " set ", strings.Join(this.data, " , "))
  390. sql = helper.StringJoin(sql, " where ", strings.Join(this.where, " and "))
  391. if this.debug {
  392. log.Println("update sql:", sql, this.value)
  393. }
  394. condition_len := 0 //所有条件数
  395. for _, ch2 := range sql {
  396. if string(ch2) == "?" {
  397. condition_len++
  398. }
  399. }
  400. if condition_len != len(this.value) {
  401. return errors.New("参数错误,条件值错误")
  402. }
  403. if this.conn == nil {
  404. this.conn = DB
  405. }
  406. stmt, err = this.conn.Prepare(sql)
  407. if err != nil {
  408. return err
  409. }
  410. this.stmt = stmt
  411. return nil
  412. }
  413. // 拼批量存在更新不存在插入sql
  414. func (this *Query) UpdateAllStmt() error {
  415. if this.dbname == "" && this.table == "" {
  416. return errors.New("参数错误,没有数据表")
  417. }
  418. dbName := getTableName(this.dbname, this.table)
  419. var sql string
  420. var dataSql []string //一组用到的占位字符
  421. var valSql []string //占位字符组
  422. var updSql []string //更新字段的sql
  423. var updFieldLen = len(this.upd_field) //需要更新的字段数量,为0时更新除id外添加值
  424. dataLen := len(this.save_data)
  425. if dataLen > 0 {
  426. //批量操作
  427. this.data = this.data[0:0]
  428. this.value = this.value[0:0]
  429. var dataSqlText string //占位字符组
  430. for i := 0; i < dataLen; i++ {
  431. if i == 0 {
  432. //第一组时分配变量空间
  433. fieldLen := len(this.save_data[i])
  434. this.data = make([]string, 0, fieldLen)
  435. dataSql = make([]string, 0, fieldLen)
  436. this.value = make([]interface{}, 0, fieldLen*dataLen)
  437. valSql = make([]string, 0, dataLen)
  438. switch updFieldLen {
  439. case 0:
  440. //预览创建数据的长度
  441. updSql = make([]string, 0, fieldLen)
  442. default:
  443. //按照需要更新字段数长度
  444. updSql = make([]string, 0, updFieldLen)
  445. for _, k := range this.upd_field {
  446. updSql = append(updSql, k+"=values("+k+")") //存储需要更新的字段
  447. }
  448. }
  449. for k := range this.save_data[i] {
  450. this.data = append(this.data, k) //存储添加的字段
  451. dataSql = append(dataSql, "?") //存储需要的占位符
  452. if updFieldLen == 0 && k != "id" {
  453. updSql = append(updSql, k+"=values("+k+")") //存储需要更新的字段
  454. }
  455. }
  456. dataSqlText = strings.Join(dataSql, ",") //组成每组占位字符格式
  457. }
  458. for j := 0; j < len(this.data); j++ {
  459. this.value = append(this.value, this.save_data[i][this.data[j]]) //存储值
  460. }
  461. valSql = append(valSql, "("+dataSqlText+")") //组成占位字符组
  462. }
  463. } else {
  464. //添加一条(原理同上)
  465. fieldLen := len(this.data)
  466. dataSql = make([]string, 0, fieldLen)
  467. valSql = make([]string, 0, 1)
  468. switch updFieldLen {
  469. case 0:
  470. updSql = make([]string, 0, fieldLen)
  471. default:
  472. updSql = make([]string, 0, updFieldLen)
  473. for _, k := range this.upd_field {
  474. updSql = append(updSql, k+"=values("+k+")")
  475. }
  476. }
  477. for i := 0; i < fieldLen; i++ {
  478. dataSql = append(dataSql, "?")
  479. if updFieldLen == 0 && this.data[i] != "id" {
  480. updSql = append(updSql, this.data[i]+"=values("+this.data[i]+")")
  481. }
  482. }
  483. if updFieldLen > 0 {
  484. for _, k := range this.upd_field {
  485. updSql = append(updSql, k+"=values("+k+")")
  486. }
  487. }
  488. valSql = append(valSql, "("+strings.Join(dataSql, " , ")+")")
  489. }
  490. if len(this.data) == 0 {
  491. return errors.New("参数错误,没有字段值")
  492. }
  493. if len(this.value) == 0 {
  494. return errors.New("参数错误,条件值错误")
  495. }
  496. setText := " values "
  497. if len(valSql) > 1 {
  498. setText = " value "
  499. }
  500. sql = helper.StringJoin("insert into ", dbName, " (", strings.Join(this.data, " , "), ")", setText, strings.Join(valSql, ","), " ON DUPLICATE KEY UPDATE ", strings.Join(updSql, " , "))
  501. if this.debug {
  502. log.Println("insert on duplicate key update sql:", sql, this.value)
  503. }
  504. conditionLen := 0 //所有条件数
  505. for _, ch2 := range sql {
  506. if string(ch2) == "?" {
  507. conditionLen++
  508. }
  509. }
  510. if conditionLen != len(this.value) {
  511. return errors.New("参数错误,条件值数量不匹配")
  512. }
  513. if this.conn == nil {
  514. this.conn = DB
  515. }
  516. stmt, err = this.conn.Prepare(sql)
  517. if err != nil {
  518. return err
  519. }
  520. this.stmt = stmt
  521. return nil
  522. }
  523. // 拼批量插入sql
  524. func (this *Query) CreateAllStmt() error {
  525. if this.dbname == "" && this.table == "" {
  526. return errors.New("参数错误,没有数据表")
  527. }
  528. dbName := getTableName(this.dbname, this.table)
  529. var sql string
  530. var dataSql []string //一组用到的占位字符
  531. var valSql []string //占位字符组
  532. dataLen := len(this.save_data)
  533. if dataLen > 0 {
  534. //清空字段和值
  535. this.data = this.data[0:0]
  536. this.value = this.value[0:0]
  537. var dataSqlText string //占位字符组
  538. for i := 0; i < dataLen; i++ {
  539. if i == 0 {
  540. //第一组时分配变量空间
  541. fieldLen := len(this.save_data[i])
  542. this.data = make([]string, 0, fieldLen)
  543. dataSql = make([]string, 0, fieldLen)
  544. this.value = make([]interface{}, 0, fieldLen*dataLen)
  545. valSql = make([]string, 0, dataLen)
  546. for k := range this.save_data[i] {
  547. this.data = append(this.data, k) //存储字段
  548. dataSql = append(dataSql, "?") //存储需要的占位符
  549. }
  550. dataSqlText = strings.Join(dataSql, ",") //组成每组占位字符格式
  551. }
  552. for j := 0; j < len(this.data); j++ {
  553. this.value = append(this.value, this.save_data[i][this.data[j]]) //存储值
  554. }
  555. valSql = append(valSql, "("+dataSqlText+")") //组成占位字符组
  556. }
  557. } else {
  558. //添加一条(原理同上)
  559. fieldLen := len(this.data)
  560. dataSql = make([]string, 0, fieldLen)
  561. for i := 0; i < fieldLen; i++ {
  562. dataSql = append(dataSql, "?")
  563. }
  564. valSql = make([]string, 0, 1)
  565. valSql = append(valSql, "("+strings.Join(dataSql, " , ")+")")
  566. }
  567. if len(this.data) == 0 {
  568. return errors.New("参数错误,字段名错误")
  569. }
  570. if len(this.value) == 0 {
  571. return errors.New("参数错误,条件值错误")
  572. }
  573. //通过sql关键字优化批量操作和单个操作效率
  574. setText := " values "
  575. if len(valSql) > 1 {
  576. setText = " value "
  577. }
  578. sql = helper.StringJoin("insert into ", dbName, " (", strings.Join(this.data, " , "), ")", setText, strings.Join(valSql, ","))
  579. if this.debug {
  580. log.Println("insert sql:", sql, this.value)
  581. }
  582. conditionLen := 0 //所有条件数
  583. for _, ch2 := range sql {
  584. if string(ch2) == "?" {
  585. conditionLen++
  586. }
  587. }
  588. if conditionLen != len(this.value) {
  589. return errors.New("参数错误,条件值数量不匹配")
  590. }
  591. if this.conn == nil {
  592. this.conn = DB
  593. }
  594. stmt, err = this.conn.Prepare(sql)
  595. if err != nil {
  596. return err
  597. }
  598. this.stmt = stmt
  599. return nil
  600. }
  601. // 拼插入sql
  602. func (this *Query) CreateStmt() error {
  603. if this.dbname == "" && this.table == "" {
  604. return errors.New("参数错误,没有数据表")
  605. }
  606. dbName := getTableName(this.dbname, this.table, this.dbtype)
  607. var sql string
  608. sql = helper.StringJoin("insert into ", dbName, " set ", strings.Join(this.data, " , "))
  609. if this.debug {
  610. log.Println("insert sql:", sql, this.value)
  611. }
  612. condition_len := 0 //所有条件数
  613. for _, ch2 := range sql {
  614. if string(ch2) == "?" {
  615. condition_len++
  616. }
  617. }
  618. if condition_len != len(this.value) {
  619. return errors.New("参数错误,条件值错误")
  620. }
  621. if this.conn == nil {
  622. this.conn = DB
  623. }
  624. stmt, err = this.conn.Prepare(sql)
  625. if err != nil {
  626. return err
  627. }
  628. this.stmt = stmt
  629. return nil
  630. }
  631. // 拼删除sql
  632. func (this *Query) DeleteStmt() error {
  633. if this.dbname == "" && this.table == "" {
  634. return errors.New("参数错误,没有数据表")
  635. }
  636. if len(this.where) < 1 {
  637. return errors.New("参数错误,缺少条件")
  638. }
  639. dbName := getTableName(this.dbname, this.table, this.dbtype)
  640. var sql string
  641. sql = helper.StringJoin("delete from ", dbName, " where ", strings.Join(this.where, " and "))
  642. if this.page_size > 0 {
  643. sql = helper.StringJoin(sql, " limit ", strconv.Itoa(this.page_size))
  644. }
  645. if this.debug {
  646. log.Println("delete sql:", sql, this.value)
  647. }
  648. condition_len := 0 //所有条件数
  649. for _, ch2 := range sql {
  650. if string(ch2) == "?" {
  651. condition_len++
  652. }
  653. }
  654. if condition_len != len(this.value) {
  655. return errors.New("参数错误,条件值错误")
  656. }
  657. if this.conn == nil {
  658. this.conn = DB
  659. }
  660. stmt, err = this.conn.Prepare(sql)
  661. if err != nil {
  662. return err
  663. }
  664. this.stmt = stmt
  665. return nil
  666. }
  667. /**
  668. * 执行查询列表
  669. * return list error
  670. */
  671. func (this *Query) Select() ([]map[string]string, error) {
  672. _, rows, err := FetchRows(this.dbname, this.table, this.alias, this.title, this.join,
  673. this.where, this.where_or, this.value, this.orderby, this.groupby, this.having, this.page, this.page_size, this.debug)
  674. return rows, err
  675. }
  676. /**
  677. * 执行查询多条数据
  678. * return row error
  679. * 2022/01/05
  680. */
  681. func (this *Query) List() ([]map[string]string, error) {
  682. err := this.QueryStmt()
  683. if err != nil {
  684. return []map[string]string{}, err
  685. }
  686. if this.stmt == nil {
  687. return []map[string]string{}, errors.New("缺少必要参数")
  688. }
  689. return StmtForQueryList(this.stmt, this.value)
  690. }
  691. /**
  692. * 执行查询一条数据
  693. * return row error
  694. */
  695. func (this *Query) Find() (map[string]string, error) {
  696. _, row, err := GetRow(this.dbname, this.table, this.alias, this.title, this.join,
  697. this.where, this.where_or, this.value, this.orderby, this.groupby, this.having, this.debug)
  698. return row, err
  699. }
  700. /**
  701. * 执行查询一条数据
  702. * return row error
  703. * 2022/01/05
  704. */
  705. func (this *Query) Get() (map[string]string, error) {
  706. this.page = 1
  707. this.page_size = 1
  708. err := this.QueryStmt()
  709. if err != nil {
  710. return map[string]string{}, err
  711. }
  712. if this.stmt == nil {
  713. return nil, errors.New("缺少必要参数")
  714. }
  715. return StmtForQueryRow(this.stmt, this.value)
  716. }
  717. /**
  718. * 执行更新
  719. * return is_updated error
  720. */
  721. func (this *Query) Update() (int64, error) {
  722. err := this.UpdateStmt()
  723. if err != nil {
  724. return 0, err
  725. }
  726. return StmtForUpdateExec(this.stmt, this.value)
  727. }
  728. // 批量更新
  729. func (this *Query) UpdateAll() (int64, error) {
  730. err := this.UpdateAllStmt()
  731. if err != nil {
  732. return 0, err
  733. }
  734. return StmtForUpdateExec(this.stmt, this.value)
  735. }
  736. /**
  737. * 执行删除
  738. * return is_delete error
  739. */
  740. func (this *Query) Delete() (int64, error) {
  741. err := this.DeleteStmt()
  742. if err != nil {
  743. return 0, err
  744. }
  745. return StmtForUpdateExec(this.stmt, this.value)
  746. }
  747. /**
  748. * 执行写入
  749. * return is_insert error
  750. */
  751. func (this *Query) Create() (int64, error) {
  752. err := this.CreateStmt()
  753. if err != nil {
  754. return 0, err
  755. }
  756. return StmtForInsertExec(this.stmt, this.value)
  757. }
  758. func (this *Query) CreateAll() (int64, error) {
  759. err := this.CreateAllStmt()
  760. if err != nil {
  761. return 0, err
  762. }
  763. return StmtForInsertExec(this.stmt, this.value)
  764. }