8 Commits

Author SHA1 Message Date
  loshiqi 01f3625f1e 兼容高斯 6 days ago
  loshiqi d16c3ca83c 兼容高斯 6 days ago
  loshiqi 16cff9c0ca 兼容高斯 1 week ago
  loshiqi bd754d1507 兼容高斯 1 week ago
  loshiqi 95a092325e values 1 week ago
  loshiqi 9bd66eefc9 插入和分页查询 1 week ago
  loshiqi 2a9f596ea8 兼容pgsql 1 week ago
  loshiqi ff5d48d51a 占位符 1 week ago
8 changed files with 390 additions and 84 deletions
Unified View
  1. +64
    -7
      chain.go
  2. +3
    -1
      conn.go
  3. +91
    -28
      db.go
  4. +2
    -1
      go.mod
  5. +10
    -2
      go.sum
  6. +69
    -11
      prepare.go
  7. +88
    -27
      transaction.go
  8. +63
    -7
      transaction_chain.go

+ 64
- 7
chain.go View File

@ -3,6 +3,7 @@ package dbquery
import ( import (
"database/sql" "database/sql"
"errors" "errors"
"github.com/jmoiron/sqlx"
"log" "log"
"strconv" "strconv"
"strings" "strings"
@ -68,6 +69,9 @@ func (this *Query) Conn(conn *sql.DB) *Query {
} }
func (this *Query) Db(dbname string) *Query { func (this *Query) Db(dbname string) *Query {
this.dbname = dbname this.dbname = dbname
if DB_PROVIDER == "PgsqlDb" {
this.dbname = ""
}
return this return this
} }
@ -225,6 +229,10 @@ func (this *Query) GetTableInfo(table string) (map[string]interface{}, error) {
if this.conn == nil { if this.conn == nil {
this.conn = DB this.conn = DB
} }
if DB_PROVIDER == "PgsqlDb" {
sql = sqlx.Rebind(sqlx.DOLLAR, sql)
sql = strings.Replace(sql, "`", `"`, -1)
}
stmtSql, err := this.conn.Prepare(sql) stmtSql, err := this.conn.Prepare(sql)
if err != nil { if err != nil {
return nil, err return nil, err
@ -413,7 +421,11 @@ func (this *Query) BuildSelectSql() (map[string]interface{}, error) {
from := strconv.Itoa((this.page - 1) * this.page_size) from := strconv.Itoa((this.page - 1) * this.page_size)
offset := strconv.Itoa(this.page_size) offset := strconv.Itoa(this.page_size)
if from != "" && offset != "" { if from != "" && offset != "" {
sql = helper.StringJoin(sql, " limit ", from, " , ", offset)
if DB_PROVIDER == "PgsqlDb" {
sql = helper.StringJoin(sql, " limit ", offset, " OFFSET ", from)
} else {
sql = helper.StringJoin(sql, " limit ", from, " , ", offset)
}
} }
} }
if this.debug { if this.debug {
@ -428,6 +440,10 @@ func (this *Query) BuildSelectSql() (map[string]interface{}, error) {
if condition_len != len(this.value) { if condition_len != len(this.value) {
return nil, errors.New("参数错误,条件值错误") return nil, errors.New("参数错误,条件值错误")
} }
if DB_PROVIDER == "PgsqlDb" {
sql = sqlx.Rebind(sqlx.DOLLAR, sql)
sql = strings.Replace(sql, "`", `"`, -1)
}
return map[string]interface{}{ return map[string]interface{}{
"sql": sql, "sql": sql,
"value": this.value, "value": this.value,
@ -499,7 +515,10 @@ func (this *Query) UpdateStmt() error {
if this.conn == nil { if this.conn == nil {
this.conn = DB this.conn = DB
} }
if DB_PROVIDER == "PgsqlDb" {
sql = sqlx.Rebind(sqlx.DOLLAR, sql)
sql = strings.Replace(sql, "`", `"`, -1)
}
stmt, err = this.conn.Prepare(sql) stmt, err = this.conn.Prepare(sql)
if err != nil { if err != nil {
@ -603,6 +622,9 @@ func (this *Query) UpdateAllStmt() error {
if len(valSql) > 1 { if len(valSql) > 1 {
setText = " value " setText = " value "
} }
if DB_PROVIDER == "PgsqlDb" {
setText = " values "
}
sql = helper.StringJoin("insert into ", dbName, " (", strings.Join(this.data, " , "), ")", setText, strings.Join(valSql, ","), " ON DUPLICATE KEY UPDATE ", strings.Join(updSql, " , ")) sql = helper.StringJoin("insert into ", dbName, " (", strings.Join(this.data, " , "), ")", setText, strings.Join(valSql, ","), " ON DUPLICATE KEY UPDATE ", strings.Join(updSql, " , "))
if this.debug { if this.debug {
@ -621,7 +643,10 @@ func (this *Query) UpdateAllStmt() error {
if this.conn == nil { if this.conn == nil {
this.conn = DB this.conn = DB
} }
if DB_PROVIDER == "PgsqlDb" {
sql = sqlx.Rebind(sqlx.DOLLAR, sql)
sql = strings.Replace(sql, "`", `"`, -1)
}
stmt, err = this.conn.Prepare(sql) stmt, err = this.conn.Prepare(sql)
if err != nil { if err != nil {
@ -692,6 +717,9 @@ func (this *Query) CreateAllStmt() error {
if len(valSql) > 1 { if len(valSql) > 1 {
setText = " value " setText = " value "
} }
if DB_PROVIDER == "PgsqlDb" {
setText = " values "
}
sql = helper.StringJoin("insert into ", dbName, " (", strings.Join(this.data, " , "), ")", setText, strings.Join(valSql, ",")) sql = helper.StringJoin("insert into ", dbName, " (", strings.Join(this.data, " , "), ")", setText, strings.Join(valSql, ","))
if this.debug { if this.debug {
@ -710,7 +738,11 @@ func (this *Query) CreateAllStmt() error {
if this.conn == nil { if this.conn == nil {
this.conn = DB this.conn = DB
} }
if DB_PROVIDER == "PgsqlDb" {
sql = sqlx.Rebind(sqlx.DOLLAR, sql)
sql = strings.Replace(sql, "`", `"`, -1)
sql = helper.StringJoin(sql, " RETURNING id")
}
stmt, err = this.conn.Prepare(sql) stmt, err = this.conn.Prepare(sql)
if err != nil { if err != nil {
@ -732,8 +764,27 @@ func (this *Query) CreateStmt() error {
dbName := getTableName(this.dbname, this.table, this.dbtype) dbName := getTableName(this.dbname, this.table, this.dbtype)
var sql string var sql string
if DB_PROVIDER == "PgsqlDb" {
insert_data := []string{}
value_data := []string{}
for _, rv := range this.data {
dv := strings.Split(rv, "=")
if len(dv) < 2 {
return errors.New("参数错误,条件值错误,=号不存在")
}
if strings.Contains(rv, "?") {
insert_data = append(insert_data, dv[0])
value_data = append(value_data, "?")
} else {
insert_data = append(insert_data, dv[0])
value_data = append(value_data, dv[1])
}
sql = helper.StringJoin("insert into ", dbName, " set ", strings.Join(this.data, " , "))
}
sql = helper.StringJoin("insert into ", dbName, " ("+strings.Join(insert_data, " , ")+")", " VALUES ", "("+strings.Join(value_data, " , ")+")", " RETURNING id")
} else {
sql = helper.StringJoin("insert into ", dbName, " set ", strings.Join(this.data, " , "))
}
if this.debug { if this.debug {
log.Println("insert sql:", sql, this.value) log.Println("insert sql:", sql, this.value)
@ -752,7 +803,10 @@ func (this *Query) CreateStmt() error {
if this.conn == nil { if this.conn == nil {
this.conn = DB this.conn = DB
} }
if DB_PROVIDER == "PgsqlDb" {
sql = sqlx.Rebind(sqlx.DOLLAR, sql)
sql = strings.Replace(sql, "`", `"`, -1)
}
stmt, err = this.conn.Prepare(sql) stmt, err = this.conn.Prepare(sql)
if err != nil { if err != nil {
@ -801,7 +855,10 @@ func (this *Query) DeleteStmt() error {
if this.conn == nil { if this.conn == nil {
this.conn = DB this.conn = DB
} }
if DB_PROVIDER == "PgsqlDb" {
sql = sqlx.Rebind(sqlx.DOLLAR, sql)
sql = strings.Replace(sql, "`", `"`, -1)
}
stmt, err = this.conn.Prepare(sql) stmt, err = this.conn.Prepare(sql)
if err != nil { if err != nil {


+ 3
- 1
conn.go View File

@ -108,7 +108,9 @@ func CloseSlaverConn() error {
func getTableName(dbName, table string, dbtype ...string) string { func getTableName(dbName, table string, dbtype ...string) string {
var db_type string = "mysql" var db_type string = "mysql"
if DB_PROVIDER == "PgsqlDb" {
dbName = ""
}
if len(dbtype) > 0 { if len(dbtype) > 0 {
if dbtype[0] != "" { if dbtype[0] != "" {
db_type = dbtype[0] db_type = dbtype[0]


+ 91
- 28
db.go View File

@ -2,6 +2,7 @@ package dbquery
import ( import (
"database/sql" "database/sql"
"github.com/jmoiron/sqlx"
"log" "log"
"strconv" "strconv"
@ -44,16 +45,34 @@ func Insert(dbName, table string, data map[string]string) (int64, error) {
valueList[i] = value valueList[i] = value
i++ i++
} }
result, err := DB.Exec("insert into "+dbName+" ("+strings.Join(keyList, ",")+") value("+strings.Join(keyStr, ",")+")", valueList...)
if err != nil {
log.Println("ERROR|插入", dbName, "数据失败,", err)
return insertId, err
var Sql string
Sql = "insert into " + dbName + " (" + strings.Join(keyList, ",") + ") values (" + strings.Join(keyStr, ",") + ")"
if DB_PROVIDER == "PgsqlDb" {
Sql = sqlx.Rebind(sqlx.DOLLAR, Sql)
Sql = strings.Replace(Sql, "`", `"`, -1)
Sql = helper.StringJoin(Sql, " RETURNING id")
stmt, err = DB.Prepare(Sql)
if err != nil {
return 0, errors.New("创建失败:" + err.Error())
}
row := stmt.QueryRow(valueList...)
var id int64
err = row.Scan(&id) // 扫描 RETURNING 返回的 ID
if err != nil {
return 0, errors.New("创建失败:" + err.Error())
}
return id, nil
} else { } else {
insertId, _ = result.LastInsertId()
time.Sleep(time.Second * 2)
return insertId, nil
result, err := DB.Exec(Sql, valueList...)
if err != nil {
log.Println("ERROR|插入", dbName, "数据失败,", err)
return insertId, err
} else {
insertId, _ = result.LastInsertId()
time.Sleep(time.Second * 2)
return insertId, nil
}
} }
} }
@ -67,7 +86,6 @@ func Update(dbName, table string, data map[string]string, where map[string]strin
if dbName == "" && table == "" { if dbName == "" && table == "" {
return rowsAffected, errors.New("没有数据表") return rowsAffected, errors.New("没有数据表")
} }
if strings.Contains(table, "select ") { if strings.Contains(table, "select ") {
dbName = table dbName = table
} else { } else {
@ -109,7 +127,13 @@ func Update(dbName, table string, data map[string]string, where map[string]strin
log.Println("ERROR|修改数据表", dbName, "时条件中有空数据,条件:", where, "数据:", data) log.Println("ERROR|修改数据表", dbName, "时条件中有空数据,条件:", where, "数据:", data)
return rowsAffected, errors.New("条件中有空数据") return rowsAffected, errors.New("条件中有空数据")
} }
result, err := DB.Exec("update "+dbName+" set "+strings.Join(keyList, " , ")+" where "+strings.Join(whereStr, " and "), valueList...)
var Sql string
Sql = "update " + dbName + " set " + strings.Join(keyList, " , ") + " where " + strings.Join(whereStr, " and ")
if DB_PROVIDER == "PgsqlDb" {
Sql = sqlx.Rebind(sqlx.DOLLAR, Sql)
Sql = strings.Replace(Sql, "`", `"`, -1)
}
result, err := DB.Exec(Sql, valueList...)
if err != nil { if err != nil {
log.Println("ERROR|修改", dbName, "数据失败,", err) log.Println("ERROR|修改", dbName, "数据失败,", err)
@ -131,7 +155,6 @@ func Delete(dbName, table string, data map[string]string, del_count ...string) (
if dbName == "" && table == "" { if dbName == "" && table == "" {
return count, errors.New("没有数据表") return count, errors.New("没有数据表")
} }
if strings.Contains(table, "select ") { if strings.Contains(table, "select ") {
dbName = table dbName = table
} else { } else {
@ -167,7 +190,13 @@ func Delete(dbName, table string, data map[string]string, del_count ...string) (
limitStr = " limit " + del_count[0] limitStr = " limit " + del_count[0]
} }
result, err := DB.Exec("delete from "+dbName+" where "+strings.Join(keyList, " and ")+limitStr, valueList...)
var Sql string
Sql = "delete from " + dbName + " where " + strings.Join(keyList, " and ") + limitStr
if DB_PROVIDER == "PgsqlDb" {
Sql = sqlx.Rebind(sqlx.DOLLAR, Sql)
Sql = strings.Replace(Sql, "`", `"`, -1)
}
result, err := DB.Exec(Sql, valueList...)
if err != nil { if err != nil {
log.Println("ERROR|删除", dbName, "数据失败,", err) log.Println("ERROR|删除", dbName, "数据失败,", err)
@ -191,7 +220,6 @@ func GetData(dbName, table string, title string, where map[string]string, limit
if dbName == "" && table == "" { if dbName == "" && table == "" {
return count, info, errors.New("没有数据表") return count, info, errors.New("没有数据表")
} }
dbName = getTableName(dbName, table) dbName = getTableName(dbName, table)
if len(title) < 1 { if len(title) < 1 {
@ -210,7 +238,11 @@ func GetData(dbName, table string, title string, where map[string]string, limit
if _, ok := limit["from"]; ok { if _, ok := limit["from"]; ok {
from = limit["from"] from = limit["from"]
} }
limitStr += " limit " + from + ",1"
if DB_PROVIDER == "PgsqlDb" {
limitStr += " limit 1 OFFSET " + from
} else {
limitStr += " limit " + from + ",1"
}
} else { } else {
limitStr = " limit 1" limitStr = " limit 1"
@ -241,8 +273,13 @@ func GetData(dbName, table string, title string, where map[string]string, limit
var err error var err error
var queryNum int = 0 var queryNum int = 0
for queryNum < 3 { //如发生错误,继续查询3次,防止数据库连接断开问题 for queryNum < 3 { //如发生错误,继续查询3次,防止数据库连接断开问题
rows, err = DB.Query("SELECT "+title+" FROM "+dbName+" where "+strings.Join(keyList, " and ")+" "+limitStr, valueList...)
var Sql string
Sql = "SELECT " + title + " FROM " + dbName + " where " + strings.Join(keyList, " and ") + " " + limitStr
if DB_PROVIDER == "PgsqlDb" {
Sql = sqlx.Rebind(sqlx.DOLLAR, Sql)
Sql = strings.Replace(Sql, "`", `"`, -1)
}
rows, err = DB.Query(Sql, valueList...)
if err == nil { if err == nil {
break break
@ -302,7 +339,6 @@ func GetRow(dbName, table_name, alias string, titles string, with, join [][]stri
if dbName == "" && table_name == "" { if dbName == "" && table_name == "" {
return count, info, errors.New("没有数据表") return count, info, errors.New("没有数据表")
} }
table := "" table := ""
withSql := "" withSql := ""
if len(with) > 0 { if len(with) > 0 {
@ -430,7 +466,10 @@ func GetRow(dbName, table_name, alias string, titles string, with, join [][]stri
} }
for queryNum < 2 { //如发生错误,继续查询2次,防止数据库连接断开问题 for queryNum < 2 { //如发生错误,继续查询2次,防止数据库连接断开问题
if DB_PROVIDER == "PgsqlDb" {
sql_str = sqlx.Rebind(sqlx.DOLLAR, sql_str)
sql_str = strings.Replace(sql_str, "`", `"`, -1)
}
rows, err = db.Query(sql_str, valueList...) rows, err = db.Query(sql_str, valueList...)
if err == nil { if err == nil {
@ -606,7 +645,11 @@ func FetchRows(dbName, table_name, alias string, titles string, with, join [][]s
from := strconv.Itoa((page - 1) * page_size) from := strconv.Itoa((page - 1) * page_size)
offset := strconv.Itoa(page_size) offset := strconv.Itoa(page_size)
if from != "" && offset != "" { if from != "" && offset != "" {
sql_str = helper.StringJoin(sql_str, " limit ", from, " , ", offset)
if DB_PROVIDER == "PgsqlDb" {
sql_str = helper.StringJoin(sql_str, " limit ", offset, " OFFSET ", from)
} else {
sql_str = helper.StringJoin(sql_str, " limit ", from, " , ", offset)
}
} }
} }
if debug { if debug {
@ -632,7 +675,10 @@ func FetchRows(dbName, table_name, alias string, titles string, with, join [][]s
var err error var err error
var queryNum int = 0 var queryNum int = 0
for queryNum < 2 { //如发生错误,继续查询2次,防止数据库连接断开问题 for queryNum < 2 { //如发生错误,继续查询2次,防止数据库连接断开问题
if DB_PROVIDER == "PgsqlDb" {
sql_str = sqlx.Rebind(sqlx.DOLLAR, sql_str)
sql_str = strings.Replace(sql_str, "`", `"`, -1)
}
rows, err = db.Query(sql_str, valueList...) rows, err = db.Query(sql_str, valueList...)
if err == nil { if err == nil {
@ -710,7 +756,6 @@ func GetList(dbName, table string, title string, where map[string]string, limit
if dbName == "" && table == "" { if dbName == "" && table == "" {
return list, errors.New("没有数据表") return list, errors.New("没有数据表")
} }
if strings.Contains(table, "select ") { if strings.Contains(table, "select ") {
dbName = table dbName = table
} else { } else {
@ -738,7 +783,12 @@ func GetList(dbName, table string, title string, where map[string]string, limit
from = limit["from"] from = limit["from"]
} }
if offset != "0" && from != "" { if offset != "0" && from != "" {
limitStr += " limit " + from + "," + offset
if DB_PROVIDER == "PgsqlDb" {
limitStr += " limit " + offset + " OFFSET " + from
} else {
limitStr += " limit " + from + "," + offset
}
} }
} }
@ -772,8 +822,13 @@ func GetList(dbName, table string, title string, where map[string]string, limit
} }
for queryNum < 5 { //如发生错误,继续查询5次,防止数据库连接断开问题 for queryNum < 5 { //如发生错误,继续查询5次,防止数据库连接断开问题
rows, err = DB.Query("select "+title+" from "+dbName+" where "+strings.Join(whereStr, " and ")+" "+limitStr, valueList...)
var Sql string
Sql = "select " + title + " from " + dbName + " where " + strings.Join(whereStr, " and ") + " " + limitStr
if DB_PROVIDER == "PgsqlDb" {
Sql = sqlx.Rebind(sqlx.DOLLAR, Sql)
Sql = strings.Replace(Sql, "`", `"`, -1)
}
rows, err = DB.Query(Sql, valueList...)
if err == nil { if err == nil {
break break
@ -837,7 +892,6 @@ func GetTotal(dbName, table string, args ...string) (total int) {
if dbName == "" && table == "" { if dbName == "" && table == "" {
return return
} }
if strings.Contains(table, "select ") { if strings.Contains(table, "select ") {
dbName = table dbName = table
} else { } else {
@ -855,7 +909,6 @@ func GetTotal(dbName, table string, args ...string) (total int) {
var queryNum int = 0 var queryNum int = 0
for queryNum < 5 { //如发生错误,继续查询5次,防止数据库连接断开问题 for queryNum < 5 { //如发生错误,继续查询5次,防止数据库连接断开问题
rows, err = DB.Query("select count(" + title + ") as count from " + dbName + " limit 1") rows, err = DB.Query("select count(" + title + ") as count from " + dbName + " limit 1")
if err == nil { if err == nil {
@ -939,7 +992,13 @@ func GetCount(dbName, table string, where map[string]string, args ...string) (to
for queryNum < 5 { //如发生错误,继续查询5次,防止数据库连接断开问题 for queryNum < 5 { //如发生错误,继续查询5次,防止数据库连接断开问题
rows, err = DB.Query("select count("+title+") as count from "+dbName+" where "+strings.Join(whereStr, " and ")+" limit 1", valueList...)
var Sql string
Sql = "select count(" + title + ") as count from " + dbName + " where " + strings.Join(whereStr, " and ") + " limit 1"
if DB_PROVIDER == "PgsqlDb" {
Sql = sqlx.Rebind(sqlx.DOLLAR, Sql)
Sql = strings.Replace(Sql, "`", `"`, -1)
}
rows, err = DB.Query(Sql, valueList...)
if err == nil { if err == nil {
break break
@ -998,6 +1057,10 @@ func DoQuery(args ...interface{}) ([]map[string]string, error) {
for queryNum < 3 { //如发生错误,继续查询5次,防止数据库连接断开问题 for queryNum < 3 { //如发生错误,继续查询5次,防止数据库连接断开问题
if len(args) > 1 { if len(args) > 1 {
if DB_PROVIDER == "PgsqlDb" {
queryStr = sqlx.Rebind(sqlx.DOLLAR, queryStr)
queryStr = strings.Replace(queryStr, "`", `"`, -1)
}
rows, err = DB.Query(queryStr, args[1:]...) //strings.Join(args[1:], ",") rows, err = DB.Query(queryStr, args[1:]...) //strings.Join(args[1:], ",")
if err != nil { if err != nil {
log.Println("ERROR|DoQuery error:", err) log.Println("ERROR|DoQuery error:", err)


+ 2
- 1
go.mod View File

@ -6,5 +6,6 @@ require (
git.tetele.net/tgo/helper v0.1.0 git.tetele.net/tgo/helper v0.1.0
gitee.com/opengauss/openGauss-connector-go-pq v1.0.7 gitee.com/opengauss/openGauss-connector-go-pq v1.0.7
github.com/denisenkom/go-mssqldb v0.11.0 github.com/denisenkom/go-mssqldb v0.11.0
github.com/go-sql-driver/mysql v1.5.0
github.com/go-sql-driver/mysql v1.8.1
github.com/jmoiron/sqlx v1.4.0
) )

+ 10
- 2
go.sum View File

@ -1,4 +1,6 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
git.tetele.net/tgo/helper v0.1.0 h1:ZdsBXUWX3+22ZzHTZRldBfBsQwu+CwUH8qScUvpgimE= git.tetele.net/tgo/helper v0.1.0 h1:ZdsBXUWX3+22ZzHTZRldBfBsQwu+CwUH8qScUvpgimE=
git.tetele.net/tgo/helper v0.1.0/go.mod h1:shYQE/hvMy3fOE8JXKGxvywOXiz3M5Nw4e+u7HR8+NY= git.tetele.net/tgo/helper v0.1.0/go.mod h1:shYQE/hvMy3fOE8JXKGxvywOXiz3M5Nw4e+u7HR8+NY=
gitee.com/opengauss/openGauss-connector-go-pq v1.0.7 h1:plLidoldV5RfMU6i/I+tvRKtP3sfDyUzQ//HGXLLsZo= gitee.com/opengauss/openGauss-connector-go-pq v1.0.7 h1:plLidoldV5RfMU6i/I+tvRKtP3sfDyUzQ//HGXLLsZo=
@ -15,8 +17,8 @@ github.com/denisenkom/go-mssqldb v0.11.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY=
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@ -34,11 +36,17 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o=
github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=


+ 69
- 11
prepare.go View File

@ -3,6 +3,7 @@ package dbquery
import ( import (
"database/sql" "database/sql"
"errors" "errors"
"github.com/jmoiron/sqlx"
"log" "log"
"strings" "strings"
@ -41,8 +42,11 @@ func StmtForRead(dbName, table string, title string, where []string, limit map[s
offset = limit["offset"] offset = limit["offset"]
} }
if from != "" && offset != "" { if from != "" && offset != "" {
limitStr += " limit " + from + "," + offset
if DB_PROVIDER == "PgsqlDb" {
limitStr += " limit " + offset + " OFFSET " + from
} else {
limitStr += " limit " + from + "," + offset
}
} }
} }
@ -52,7 +56,13 @@ func StmtForRead(dbName, table string, title string, where []string, limit map[s
if len(where) > 0 { if len(where) > 0 {
// log.Println("SELECT " + title + " FROM " + dbName + " where " + strings.Join(where, " and ") + limitStr) // log.Println("SELECT " + title + " FROM " + dbName + " where " + strings.Join(where, " and ") + limitStr)
stmt, err = DB.Prepare("SELECT " + title + " FROM " + dbName + " where " + strings.Join(where, " and ") + limitStr)
var Sql string
Sql = "SELECT " + title + " FROM " + dbName + " where " + strings.Join(where, " and ") + limitStr
if DB_PROVIDER == "PgsqlDb" {
Sql = sqlx.Rebind(sqlx.DOLLAR, Sql)
Sql = strings.Replace(Sql, "`", `"`, -1)
}
stmt, err = DB.Prepare(Sql)
} else { } else {
// log.Println("SELECT " + title + " FROM " + dbName + limitStr) // log.Println("SELECT " + title + " FROM " + dbName + limitStr)
stmt, err = DB.Prepare("SELECT " + title + " FROM " + dbName + limitStr) stmt, err = DB.Prepare("SELECT " + title + " FROM " + dbName + limitStr)
@ -186,8 +196,13 @@ func StmtForUpdate(dbName, table string, data []string, where []string) (*sql.St
var stmt *sql.Stmt var stmt *sql.Stmt
var err error var err error
stmt, err = DB.Prepare("update " + dbName + " set " + strings.Join(data, " , ") + " where " + strings.Join(where, " and "))
var Sql string
Sql = "update " + dbName + " set " + strings.Join(data, " , ") + " where " + strings.Join(where, " and ")
if DB_PROVIDER == "PgsqlDb" {
Sql = sqlx.Rebind(sqlx.DOLLAR, Sql)
Sql = strings.Replace(Sql, "`", `"`, -1)
}
stmt, err = DB.Prepare(Sql)
return stmt, err return stmt, err
} }
@ -224,7 +239,35 @@ func StmtForInsert(dbName, table string, data []string) (*sql.Stmt, error) {
var stmt *sql.Stmt var stmt *sql.Stmt
var err error var err error
stmt, err = DB.Prepare("insert into " + dbName + " set " + strings.Join(data, " , "))
var sql string
if DB_PROVIDER == "PgsqlDb" {
insert_data := []string{}
value_data := []string{}
for _, rv := range data {
dv := strings.Split(rv, "=")
if len(dv) < 2 {
return nil, errors.New("参数错误,条件值错误,=号不存在")
}
if strings.Contains(rv, "?") {
insert_data = append(insert_data, dv[0])
value_data = append(value_data, "?")
} else {
insert_data = append(insert_data, dv[0])
value_data = append(value_data, dv[1])
}
}
sql = helper.StringJoin("insert into ", dbName, " ("+strings.Join(insert_data, " , ")+")", " VALUES ", "("+strings.Join(value_data, " , ")+")", " RETURNING id")
} else {
sql = helper.StringJoin("insert into ", dbName, " set ", strings.Join(data, " , "))
}
if DB_PROVIDER == "PgsqlDb" {
sql = sqlx.Rebind(sqlx.DOLLAR, sql)
sql = strings.Replace(sql, "`", `"`, -1)
}
//stmt, err = DB.Prepare("insert into " + dbName + " set " + strings.Join(data, " , "))
stmt, err = DB.Prepare(sql)
return stmt, err return stmt, err
} }
@ -234,11 +277,23 @@ func StmtForInsert(dbName, table string, data []string) (*sql.Stmt, error) {
* @return lastId error * @return lastId error
*/ */
func StmtForInsertExec(stmt *sql.Stmt, valuelist []interface{}) (int64, error) { func StmtForInsertExec(stmt *sql.Stmt, valuelist []interface{}) (int64, error) {
res, err := stmt.Exec(valuelist...)
if err != nil {
return 0, errors.New("创建失败:" + err.Error())
if DB_PROVIDER == "PgsqlDb" {
row := stmt.QueryRow(valuelist...)
var id int64
err = row.Scan(&id) // 扫描 RETURNING 返回的 ID
if err != nil {
return 0, errors.New("创建失败:" + err.Error())
}
return id, nil
} else {
res, err := stmt.Exec(valuelist...)
if err != nil {
return 0, errors.New("创建失败:" + err.Error())
}
return res.LastInsertId()
} }
return res.LastInsertId()
} }
/** /**
@ -350,7 +405,10 @@ func StmtForQuery(querysql string) (*sql.Stmt, error) {
var stmt *sql.Stmt var stmt *sql.Stmt
var err error var err error
if DB_PROVIDER == "PgsqlDb" {
querysql = sqlx.Rebind(sqlx.DOLLAR, querysql)
querysql = strings.Replace(querysql, "`", `"`, -1)
}
stmt, err = DB.Prepare(querysql) stmt, err = DB.Prepare(querysql)
return stmt, err return stmt, err


+ 88
- 27
transaction.go View File

@ -6,6 +6,8 @@ package dbquery
import ( import (
"database/sql" "database/sql"
"errors" "errors"
"git.tetele.net/tgo/helper"
"github.com/jmoiron/sqlx"
"log" "log"
"strings" "strings"
"time" "time"
@ -43,16 +45,34 @@ func TxInsert(tx *sql.Tx, dbname, table string, data map[string]string) (int64,
valueList[i] = value valueList[i] = value
i++ i++
} }
result, err := tx.Exec("insert into "+dbName+" ("+strings.Join(keyList, ",")+") value("+strings.Join(keyStr, ",")+")", valueList...)
if err != nil {
log.Println("ERROR", "insert into ", dbName, "error:", err)
return insertId, err
if DB_PROVIDER == "PgsqlDb" {
var Sql string
Sql = "insert into " + dbName + " (" + strings.Join(keyList, ",") + ") values (" + strings.Join(keyStr, ",") + ")"
Sql = sqlx.Rebind(sqlx.DOLLAR, Sql)
Sql = strings.Replace(Sql, "`", `"`, -1)
Sql = helper.StringJoin(Sql, " RETURNING id")
stmt, err = tx.Prepare(Sql)
if err != nil {
return 0, errors.New("创建失败:" + err.Error())
}
row := stmt.QueryRow(valueList...)
var id int64
err = row.Scan(&id) // 扫描 RETURNING 返回的 ID
if err != nil {
return 0, errors.New("创建失败:" + err.Error())
}
return id, nil
} else { } else {
insertId, _ = result.LastInsertId()
time.Sleep(time.Second * 2)
return insertId, nil
result, err := tx.Exec("insert into "+dbName+" ("+strings.Join(keyList, ",")+") value("+strings.Join(keyStr, ",")+")", valueList...)
if err != nil {
log.Println("ERROR", "insert into ", dbName, "error:", err)
return insertId, err
} else {
insertId, _ = result.LastInsertId()
time.Sleep(time.Second * 2)
return insertId, nil
}
} }
} }
@ -84,28 +104,48 @@ func TxPreInsert(tx *sql.Tx, dbname, table string, data map[string]interface{})
var field []string = make([]string, len(data)) var field []string = make([]string, len(data))
var valuelist []interface{} = make([]interface{}, len(data)) var valuelist []interface{} = make([]interface{}, len(data))
insert_data := []string{}
value_data := []string{}
var i int = 0 var i int = 0
for key, item := range data { for key, item := range data {
field[i] = key + "=?" field[i] = key + "=?"
valuelist[i] = item valuelist[i] = item
i++ i++
}
insert_data = append(insert_data, key)
value_data = append(value_data, "?")
}
if DB_PROVIDER == "PgsqlDb" {
Sql := helper.StringJoin("insert into ", dbName, " ("+strings.Join(insert_data, " , ")+")", " VALUES ", "("+strings.Join(value_data, " , ")+")", " RETURNING id")
Sql = sqlx.Rebind(sqlx.DOLLAR, Sql)
Sql = strings.Replace(Sql, "`", `"`, -1)
stmt, err = tx.Prepare(Sql)
if err != nil {
return 0, errors.New("创建失败:" + err.Error())
}
row := stmt.QueryRow(valuelist...)
var id int64
err = row.Scan(&id) // 扫描 RETURNING 返回的 ID
if err != nil {
return 0, errors.New("创建失败:" + err.Error())
}
return id, nil
} else {
sql := "insert into " + dbName + " set " + strings.Join(field, " , ")
stmt, err = tx.Prepare(sql)
sql := "insert into " + dbName + " set " + strings.Join(field, " , ")
stmt, err = tx.Prepare(sql)
if err != nil {
log.Println("insert prepare error:", sql, err)
return 0, errors.New("insert prepare error:" + err.Error())
}
result, err := stmt.Exec(valuelist...)
if err != nil {
log.Println("insert exec error:", sql, valuelist, err)
return 0, errors.New("insert exec error:" + err.Error())
if err != nil {
log.Println("insert prepare error:", sql, err)
return 0, errors.New("insert prepare error:" + err.Error())
}
result, err := stmt.Exec(valuelist...)
if err != nil {
log.Println("insert exec error:", sql, valuelist, err)
return 0, errors.New("insert exec error:" + err.Error())
}
insertId, _ := result.LastInsertId()
return insertId, nil
} }
insertId, _ := result.LastInsertId()
return insertId, nil
} }
@ -160,7 +200,13 @@ func TxUpdate(tx *sql.Tx, dbname, table string, data map[string]string, where ma
log.Println("ERROR", "update", dbName, "error, params empty") log.Println("ERROR", "update", dbName, "error, params empty")
return rowsAffected, errors.New("params empty") return rowsAffected, errors.New("params empty")
} }
result, err := tx.Exec("update "+dbName+" set "+strings.Join(keyList, " , ")+" where "+strings.Join(whereStr, " and "), valueList...)
var Sql string
Sql = "update " + dbName + " set " + strings.Join(keyList, " , ") + " where " + strings.Join(whereStr, " and ")
if DB_PROVIDER == "PgsqlDb" {
Sql = sqlx.Rebind(sqlx.DOLLAR, Sql)
Sql = strings.Replace(Sql, "`", `"`, -1)
}
result, err := tx.Exec(Sql, valueList...)
if err != nil { if err != nil {
log.Println("ERROR", "update", dbName, "error:", err) log.Println("ERROR", "update", dbName, "error:", err)
@ -198,7 +244,10 @@ func TxPreUpdate(tx *sql.Tx, dbname, table string, data []string, where []string
var stmt *sql.Stmt var stmt *sql.Stmt
sql := "update " + dbName + " set " + strings.Join(data, " , ") + " where " + strings.Join(where, " and ") sql := "update " + dbName + " set " + strings.Join(data, " , ") + " where " + strings.Join(where, " and ")
if DB_PROVIDER == "PgsqlDb" {
sql = sqlx.Rebind(sqlx.DOLLAR, sql)
sql = strings.Replace(sql, "`", `"`, -1)
}
stmt, err = tx.Prepare(sql) stmt, err = tx.Prepare(sql)
if err != nil { if err != nil {
@ -260,7 +309,13 @@ func TxDelete(tx *sql.Tx, dbname, table string, where map[string]string, del_cou
limitStr = " limit " + del_count[0] limitStr = " limit " + del_count[0]
} }
result, err := tx.Exec("delete from "+dbName+" where "+strings.Join(keyList, " and ")+limitStr, valueList...)
var Sql string
Sql = "delete from " + dbName + " where " + strings.Join(keyList, " and ") + limitStr
if DB_PROVIDER == "PgsqlDb" {
Sql = sqlx.Rebind(sqlx.DOLLAR, Sql)
Sql = strings.Replace(Sql, "`", `"`, -1)
}
result, err := tx.Exec(Sql, valueList...)
if err != nil { if err != nil {
log.Println("ERROR", "delete from", dbName, "error:", err) log.Println("ERROR", "delete from", dbName, "error:", err)
@ -296,7 +351,13 @@ func TxForRead(tx *sql.Tx, dbName, table string, title string, where []string) (
if len(where) > 0 { if len(where) > 0 {
// log.Println("SELECT " + title + " FROM " + dbName + " where " + strings.Join(where, " and ") + " FOR UPDATE") // log.Println("SELECT " + title + " FROM " + dbName + " where " + strings.Join(where, " and ") + " FOR UPDATE")
stmt, err = tx.Prepare("SELECT " + title + " FROM " + dbName + " where " + strings.Join(where, " and ") + " FOR UPDATE")
var Sql string
Sql = "SELECT " + title + " FROM " + dbName + " where " + strings.Join(where, " and ") + " FOR UPDATE"
if DB_PROVIDER == "PgsqlDb" {
Sql = sqlx.Rebind(sqlx.DOLLAR, Sql)
Sql = strings.Replace(Sql, "`", `"`, -1)
}
stmt, err = tx.Prepare(Sql)
} else { } else {
// log.Println("SELECT " + title + " FROM " + dbName + " FOR UPDATE") // log.Println("SELECT " + title + " FROM " + dbName + " FOR UPDATE")
stmt, err = tx.Prepare("SELECT " + title + " FROM " + dbName + " FOR UPDATE") stmt, err = tx.Prepare("SELECT " + title + " FROM " + dbName + " FOR UPDATE")


+ 63
- 7
transaction_chain.go View File

@ -6,6 +6,7 @@ package dbquery
import ( import (
"database/sql" "database/sql"
"errors" "errors"
"github.com/jmoiron/sqlx"
"log" "log"
"strconv" "strconv"
"strings" "strings"
@ -331,7 +332,12 @@ func (this *TxQuery) BuildSelectSql() (map[string]interface{}, error) {
from := strconv.Itoa((this.page - 1) * this.page_size) from := strconv.Itoa((this.page - 1) * this.page_size)
offset := strconv.Itoa(this.page_size) offset := strconv.Itoa(this.page_size)
if from != "" && offset != "" { if from != "" && offset != "" {
sql = helper.StringJoin(sql, " limit ", from, " , ", offset)
if DB_PROVIDER == "PgsqlDb" {
sql = helper.StringJoin(sql, " limit ", offset, " OFFSET ", from)
} else {
sql = helper.StringJoin(sql, " limit ", from, " , ", offset)
}
} }
} }
@ -348,6 +354,10 @@ func (this *TxQuery) BuildSelectSql() (map[string]interface{}, error) {
if condition_len != len(this.value) { if condition_len != len(this.value) {
return nil, errors.New("参数错误,条件值错误") return nil, errors.New("参数错误,条件值错误")
} }
if DB_PROVIDER == "PgsqlDb" {
sql = sqlx.Rebind(sqlx.DOLLAR, sql)
sql = strings.Replace(sql, "`", `"`, -1)
}
return map[string]interface{}{ return map[string]interface{}{
"sql": sql, "sql": sql,
"value": this.value, "value": this.value,
@ -365,7 +375,10 @@ func (this *TxQuery) GetTableInfo(table string) (map[string]interface{}, error)
"IS_NULLABLE", //是否为空 "IS_NULLABLE", //是否为空
} }
sql := "select `" + strings.Join(field, "`,`") + "` from information_schema.COLUMNS where table_name = ? and table_schema = ?" sql := "select `" + strings.Join(field, "`,`") + "` from information_schema.COLUMNS where table_name = ? and table_schema = ?"
if DB_PROVIDER == "PgsqlDb" {
sql = sqlx.Rebind(sqlx.DOLLAR, sql)
sql = strings.Replace(sql, "`", `"`, -1)
}
stmtSql, err := this.tx.Prepare(sql) stmtSql, err := this.tx.Prepare(sql)
if err != nil { if err != nil {
return nil, err return nil, err
@ -471,7 +484,10 @@ func (this *TxQuery) UpdateStmt() error {
if condition_len != len(this.value) { if condition_len != len(this.value) {
return errors.New("参数错误,条件值错误") return errors.New("参数错误,条件值错误")
} }
if DB_PROVIDER == "PgsqlDb" {
sql = sqlx.Rebind(sqlx.DOLLAR, sql)
sql = strings.Replace(sql, "`", `"`, -1)
}
stmt, err = this.tx.Prepare(sql) stmt, err = this.tx.Prepare(sql)
if err != nil { if err != nil {
@ -574,6 +590,9 @@ func (this *TxQuery) UpdateAllStmt() error {
if len(valSql) > 1 { if len(valSql) > 1 {
setText = " value " setText = " value "
} }
if DB_PROVIDER == "PgsqlDb" {
setText = " values "
}
sql = helper.StringJoin("insert into ", dbName, " (", strings.Join(this.data, " , "), ")", setText, strings.Join(valSql, ","), " ON DUPLICATE KEY UPDATE ", strings.Join(updSql, " , ")) sql = helper.StringJoin("insert into ", dbName, " (", strings.Join(this.data, " , "), ")", setText, strings.Join(valSql, ","), " ON DUPLICATE KEY UPDATE ", strings.Join(updSql, " , "))
if this.debug { if this.debug {
@ -589,6 +608,10 @@ func (this *TxQuery) UpdateAllStmt() error {
if conditionLen != len(this.value) { if conditionLen != len(this.value) {
return errors.New("参数错误,条件值数量不匹配") return errors.New("参数错误,条件值数量不匹配")
} }
if DB_PROVIDER == "PgsqlDb" {
sql = sqlx.Rebind(sqlx.DOLLAR, sql)
sql = strings.Replace(sql, "`", `"`, -1)
}
stmt, err = this.tx.Prepare(sql) stmt, err = this.tx.Prepare(sql)
if err != nil { if err != nil {
@ -610,8 +633,28 @@ func (this *TxQuery) CreateStmt() error {
dbName := getTableName(this.dbname, this.table) dbName := getTableName(this.dbname, this.table)
var sql string var sql string
if DB_PROVIDER == "PgsqlDb" {
insert_data := []string{}
value_data := []string{}
for _, rv := range this.data {
dv := strings.Split(rv, "=")
if len(dv) < 2 {
return errors.New("参数错误,条件值错误,=号不存在")
}
if strings.Contains(rv, "?") {
insert_data = append(insert_data, dv[0])
value_data = append(value_data, "?")
} else {
insert_data = append(insert_data, dv[0])
value_data = append(value_data, dv[1])
}
sql = helper.StringJoin("insert into ", dbName, " set ", strings.Join(this.data, " , "))
}
sql = helper.StringJoin("insert into ", dbName, " ("+strings.Join(insert_data, " , ")+")", " VALUES ", "("+strings.Join(value_data, " , ")+")", " RETURNING id")
} else {
sql = helper.StringJoin("insert into ", dbName, " set ", strings.Join(this.data, " , "))
}
//sql = helper.StringJoin("insert into ", dbName, " set ", strings.Join(this.data, " , "))
if this.debug { if this.debug {
log.Println("insert sql:", sql, this.value) log.Println("insert sql:", sql, this.value)
@ -627,7 +670,10 @@ func (this *TxQuery) CreateStmt() error {
if condition_len != len(this.value) { if condition_len != len(this.value) {
return errors.New("参数错误,条件值错误") return errors.New("参数错误,条件值错误")
} }
if DB_PROVIDER == "PgsqlDb" {
sql = sqlx.Rebind(sqlx.DOLLAR, sql)
sql = strings.Replace(sql, "`", `"`, -1)
}
stmt, err = this.tx.Prepare(sql) stmt, err = this.tx.Prepare(sql)
if err != nil { if err != nil {
@ -698,6 +744,9 @@ func (this *TxQuery) CreateAllStmt() error {
if len(valSql) > 1 { if len(valSql) > 1 {
setText = " value " setText = " value "
} }
if DB_PROVIDER == "PgsqlDb" {
setText = " values "
}
sql = helper.StringJoin("insert into ", dbName, " (", strings.Join(this.data, " , "), ")", setText, strings.Join(valSql, ",")) sql = helper.StringJoin("insert into ", dbName, " (", strings.Join(this.data, " , "), ")", setText, strings.Join(valSql, ","))
if len(this.value) == 0 { if len(this.value) == 0 {
return errors.New("参数错误,条件值错误") return errors.New("参数错误,条件值错误")
@ -716,7 +765,11 @@ func (this *TxQuery) CreateAllStmt() error {
if conditionLen != len(this.value) { if conditionLen != len(this.value) {
return errors.New("参数错误,条件值数量不匹配") return errors.New("参数错误,条件值数量不匹配")
} }
if DB_PROVIDER == "PgsqlDb" {
sql = sqlx.Rebind(sqlx.DOLLAR, sql)
sql = strings.Replace(sql, "`", `"`, -1)
sql = helper.StringJoin(sql, " RETURNING id")
}
stmt, err = this.tx.Prepare(sql) stmt, err = this.tx.Prepare(sql)
if err != nil { if err != nil {
@ -762,7 +815,10 @@ func (this *TxQuery) DeleteStmt() error {
if condition_len != len(this.value) { if condition_len != len(this.value) {
return errors.New("参数错误,条件值错误") return errors.New("参数错误,条件值错误")
} }
if DB_PROVIDER == "PgsqlDb" {
sql = sqlx.Rebind(sqlx.DOLLAR, sql)
sql = strings.Replace(sql, "`", `"`, -1)
}
stmt, err = this.tx.Prepare(sql) stmt, err = this.tx.Prepare(sql)
if err != nil { if err != nil {


Loading…
Cancel
Save