add support for ql
This commit is contained in:
parent
8c79a0cc1d
commit
1a53dc40e1
|
@ -1120,7 +1120,11 @@ func (engine *Engine) FormatTime(sqlTypeName string, t time.Time) (v interface{}
|
||||||
case core.Date:
|
case core.Date:
|
||||||
v = engine.TZTime(t).Format("2006-01-02")
|
v = engine.TZTime(t).Format("2006-01-02")
|
||||||
case core.DateTime, core.TimeStamp:
|
case core.DateTime, core.TimeStamp:
|
||||||
v = engine.TZTime(t).Format("2006-01-02 15:04:05")
|
if engine.dialect.DBType() == "ql" {
|
||||||
|
v = engine.TZTime(t)
|
||||||
|
} else {
|
||||||
|
v = engine.TZTime(t).Format("2006-01-02 15:04:05")
|
||||||
|
}
|
||||||
case core.TimeStampz:
|
case core.TimeStampz:
|
||||||
if engine.dialect.DBType() == core.MSSQL {
|
if engine.dialect.DBType() == core.MSSQL {
|
||||||
v = engine.TZTime(t).Format("2006-01-02T15:04:05.9999999Z07:00")
|
v = engine.TZTime(t).Format("2006-01-02T15:04:05.9999999Z07:00")
|
||||||
|
|
26
session.go
26
session.go
|
@ -1083,7 +1083,7 @@ func (session *Session) Find(rowsSlicePtr interface{}, condiBean ...interface{})
|
||||||
if len(condiBean) > 0 {
|
if len(condiBean) > 0 {
|
||||||
colNames, args := buildConditions(session.Engine, table, condiBean[0], true, true,
|
colNames, args := buildConditions(session.Engine, table, condiBean[0], true, true,
|
||||||
false, true, session.Statement.allUseBool, session.Statement.useAllCols,
|
false, true, session.Statement.allUseBool, session.Statement.useAllCols,
|
||||||
session.Statement.mustColumnMap)
|
session.Statement.mustColumnMap, false)
|
||||||
session.Statement.ConditionStr = strings.Join(colNames, " AND ")
|
session.Statement.ConditionStr = strings.Join(colNames, " AND ")
|
||||||
session.Statement.BeanArgs = args
|
session.Statement.BeanArgs = args
|
||||||
}
|
}
|
||||||
|
@ -2950,7 +2950,7 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6
|
||||||
if session.Statement.ColumnStr == "" {
|
if session.Statement.ColumnStr == "" {
|
||||||
colNames, args = buildConditions(session.Engine, table, bean, false, false,
|
colNames, args = buildConditions(session.Engine, table, bean, false, false,
|
||||||
false, false, session.Statement.allUseBool, session.Statement.useAllCols,
|
false, false, session.Statement.allUseBool, session.Statement.useAllCols,
|
||||||
session.Statement.mustColumnMap)
|
session.Statement.mustColumnMap, true)
|
||||||
} else {
|
} else {
|
||||||
colNames, args, err = genCols(table, session, bean, true, true)
|
colNames, args, err = genCols(table, session, bean, true, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -2991,7 +2991,7 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6
|
||||||
if len(condiBean) > 0 {
|
if len(condiBean) > 0 {
|
||||||
condiColNames, condiArgs = buildConditions(session.Engine, session.Statement.RefTable, condiBean[0], true, true,
|
condiColNames, condiArgs = buildConditions(session.Engine, session.Statement.RefTable, condiBean[0], true, true,
|
||||||
false, true, session.Statement.allUseBool, session.Statement.useAllCols,
|
false, true, session.Statement.allUseBool, session.Statement.useAllCols,
|
||||||
session.Statement.mustColumnMap)
|
session.Statement.mustColumnMap, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
var condition = ""
|
var condition = ""
|
||||||
|
@ -3004,11 +3004,12 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6
|
||||||
|
|
||||||
if condition == "" {
|
if condition == "" {
|
||||||
if len(condiColNames) > 0 {
|
if len(condiColNames) > 0 {
|
||||||
condition = fmt.Sprintf("%v", strings.Join(condiColNames, " AND "))
|
condition = fmt.Sprintf("%v", strings.Join(condiColNames, " "+session.Engine.Dialect().AndStr()+" "))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if len(condiColNames) > 0 {
|
if len(condiColNames) > 0 {
|
||||||
condition = fmt.Sprintf("(%v) AND (%v)", condition, strings.Join(condiColNames, " AND "))
|
condition = fmt.Sprintf("(%v) %v (%v)", condition,
|
||||||
|
session.Engine.Dialect().AndStr(), strings.Join(condiColNames, " "+session.Engine.Dialect().AndStr()+" "))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3018,7 +3019,7 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6
|
||||||
var verValue *reflect.Value
|
var verValue *reflect.Value
|
||||||
if table.Version != "" && session.Statement.checkVersion {
|
if table.Version != "" && session.Statement.checkVersion {
|
||||||
if condition != "" {
|
if condition != "" {
|
||||||
condition = fmt.Sprintf("WHERE (%v) AND %v = ?", condition,
|
condition = fmt.Sprintf("WHERE (%v) %v %v = ?", condition, session.Engine.Dialect().AndStr(),
|
||||||
session.Engine.Quote(table.Version))
|
session.Engine.Quote(table.Version))
|
||||||
} else {
|
} else {
|
||||||
condition = fmt.Sprintf("WHERE %v = ?", session.Engine.Quote(table.Version))
|
condition = fmt.Sprintf("WHERE %v = ?", session.Engine.Quote(table.Version))
|
||||||
|
@ -3026,7 +3027,7 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6
|
||||||
inSql, inArgs = session.Statement.genInSql()
|
inSql, inArgs = session.Statement.genInSql()
|
||||||
if len(inSql) > 0 {
|
if len(inSql) > 0 {
|
||||||
if condition != "" {
|
if condition != "" {
|
||||||
condition += " AND " + inSql
|
condition += " " + session.Engine.Dialect().AndStr() + " " + inSql
|
||||||
} else {
|
} else {
|
||||||
condition = "WHERE " + inSql
|
condition = "WHERE " + inSql
|
||||||
}
|
}
|
||||||
|
@ -3052,7 +3053,7 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6
|
||||||
inSql, inArgs = session.Statement.genInSql()
|
inSql, inArgs = session.Statement.genInSql()
|
||||||
if len(inSql) > 0 {
|
if len(inSql) > 0 {
|
||||||
if condition != "" {
|
if condition != "" {
|
||||||
condition += " AND " + inSql
|
condition += " " + session.Engine.Dialect().AndStr() + " " + inSql
|
||||||
} else {
|
} else {
|
||||||
condition = "WHERE " + inSql
|
condition = "WHERE " + inSql
|
||||||
}
|
}
|
||||||
|
@ -3194,23 +3195,24 @@ func (session *Session) Delete(bean interface{}) (int64, error) {
|
||||||
session.Statement.RefTable = table
|
session.Statement.RefTable = table
|
||||||
colNames, args := buildConditions(session.Engine, table, bean, true, true,
|
colNames, args := buildConditions(session.Engine, table, bean, true, true,
|
||||||
false, true, session.Statement.allUseBool, session.Statement.useAllCols,
|
false, true, session.Statement.allUseBool, session.Statement.useAllCols,
|
||||||
session.Statement.mustColumnMap)
|
session.Statement.mustColumnMap, false)
|
||||||
|
|
||||||
var condition = ""
|
var condition = ""
|
||||||
|
var andStr = session.Engine.dialect.AndStr()
|
||||||
|
|
||||||
session.Statement.processIdParam()
|
session.Statement.processIdParam()
|
||||||
if session.Statement.WhereStr != "" {
|
if session.Statement.WhereStr != "" {
|
||||||
condition = session.Statement.WhereStr
|
condition = session.Statement.WhereStr
|
||||||
if len(colNames) > 0 {
|
if len(colNames) > 0 {
|
||||||
condition += " AND " + strings.Join(colNames, " AND ")
|
condition += " " + andStr + " " + strings.Join(colNames, " "+andStr+" ")
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
condition = strings.Join(colNames, " AND ")
|
condition = strings.Join(colNames, " "+andStr+" ")
|
||||||
}
|
}
|
||||||
inSql, inArgs := session.Statement.genInSql()
|
inSql, inArgs := session.Statement.genInSql()
|
||||||
if len(inSql) > 0 {
|
if len(inSql) > 0 {
|
||||||
if len(condition) > 0 {
|
if len(condition) > 0 {
|
||||||
condition += " AND "
|
condition += " " + andStr + " "
|
||||||
}
|
}
|
||||||
condition += inSql
|
condition += inSql
|
||||||
args = append(args, inArgs...)
|
args = append(args, inArgs...)
|
||||||
|
|
75
statement.go
75
statement.go
|
@ -96,6 +96,9 @@ func (statement *Statement) Sql(querystring string, args ...interface{}) *Statem
|
||||||
|
|
||||||
// add Where statment
|
// add Where statment
|
||||||
func (statement *Statement) Where(querystring string, args ...interface{}) *Statement {
|
func (statement *Statement) Where(querystring string, args ...interface{}) *Statement {
|
||||||
|
if !strings.Contains(querystring, statement.Engine.dialect.EqStr()) {
|
||||||
|
querystring = strings.Replace(querystring, "=", statement.Engine.dialect.EqStr(), -1)
|
||||||
|
}
|
||||||
statement.WhereStr = querystring
|
statement.WhereStr = querystring
|
||||||
statement.Params = args
|
statement.Params = args
|
||||||
return statement
|
return statement
|
||||||
|
@ -257,7 +260,7 @@ func (statement *Statement) Table(tableNameOrBean interface{}) *Statement {
|
||||||
func buildConditions(engine *Engine, table *core.Table, bean interface{},
|
func buildConditions(engine *Engine, table *core.Table, bean interface{},
|
||||||
includeVersion bool, includeUpdated bool, includeNil bool,
|
includeVersion bool, includeUpdated bool, includeNil bool,
|
||||||
includeAutoIncr bool, allUseBool bool, useAllCols bool,
|
includeAutoIncr bool, allUseBool bool, useAllCols bool,
|
||||||
mustColumnMap map[string]bool) ([]string, []interface{}) {
|
mustColumnMap map[string]bool, update bool) ([]string, []interface{}) {
|
||||||
|
|
||||||
colNames := make([]string, 0)
|
colNames := make([]string, 0)
|
||||||
var args = make([]interface{}, 0)
|
var args = make([]interface{}, 0)
|
||||||
|
@ -298,7 +301,7 @@ func buildConditions(engine *Engine, table *core.Table, bean interface{},
|
||||||
if fieldValue.IsNil() {
|
if fieldValue.IsNil() {
|
||||||
if includeNil {
|
if includeNil {
|
||||||
args = append(args, nil)
|
args = append(args, nil)
|
||||||
colNames = append(colNames, fmt.Sprintf("%v=?", engine.Quote(col.Name)))
|
colNames = append(colNames, fmt.Sprintf("%v %s ?", engine.Quote(col.Name), engine.dialect.EqStr()))
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
} else if !fieldValue.IsValid() {
|
} else if !fieldValue.IsValid() {
|
||||||
|
@ -353,7 +356,7 @@ func buildConditions(engine *Engine, table *core.Table, bean interface{},
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
val = engine.FormatTime(col.SQLType.Name, t)
|
val = engine.FormatTime(col.SQLType.Name, t)
|
||||||
fmt.Println("-------", t, val, col.Name)
|
//fmt.Println("-------", t, val, col.Name)
|
||||||
} else {
|
} else {
|
||||||
engine.autoMapType(fieldValue)
|
engine.autoMapType(fieldValue)
|
||||||
if table, ok := engine.Tables[fieldValue.Type()]; ok {
|
if table, ok := engine.Tables[fieldValue.Type()]; ok {
|
||||||
|
@ -412,7 +415,21 @@ func buildConditions(engine *Engine, table *core.Table, bean interface{},
|
||||||
}
|
}
|
||||||
|
|
||||||
args = append(args, val)
|
args = append(args, val)
|
||||||
colNames = append(colNames, fmt.Sprintf("%v=?", engine.Quote(col.Name)))
|
var condi string
|
||||||
|
if update {
|
||||||
|
if col.IsPrimaryKey && engine.dialect.DBType() == "ql" {
|
||||||
|
continue
|
||||||
|
} else {
|
||||||
|
condi = fmt.Sprintf("%v = ?", engine.Quote(col.Name))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if col.IsPrimaryKey && engine.dialect.DBType() == "ql" {
|
||||||
|
condi = "id() == ?"
|
||||||
|
} else {
|
||||||
|
condi = fmt.Sprintf("%v %s ?", engine.Quote(col.Name), engine.dialect.EqStr())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
colNames = append(colNames, condi)
|
||||||
}
|
}
|
||||||
|
|
||||||
return colNames, args
|
return colNames, args
|
||||||
|
@ -646,7 +663,22 @@ func (statement *Statement) genColumnStr() string {
|
||||||
if col.MapType == core.ONLYTODB {
|
if col.MapType == core.ONLYTODB {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
colNames = append(colNames, statement.Engine.Quote(statement.TableName())+"."+statement.Engine.Quote(col.Name))
|
|
||||||
|
if statement.JoinStr != "" {
|
||||||
|
name := statement.Engine.Quote(statement.TableName()) + "." + statement.Engine.Quote(col.Name)
|
||||||
|
if col.IsPrimaryKey && statement.Engine.Dialect().DBType() == "ql" {
|
||||||
|
colNames = append(colNames, "id() as "+name)
|
||||||
|
} else {
|
||||||
|
colNames = append(colNames, name)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
name := statement.Engine.Quote(col.Name)
|
||||||
|
if col.IsPrimaryKey && statement.Engine.Dialect().DBType() == "ql" {
|
||||||
|
colNames = append(colNames, "id() as "+name)
|
||||||
|
} else {
|
||||||
|
colNames = append(colNames, name)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return strings.Join(colNames, ", ")
|
return strings.Join(colNames, ", ")
|
||||||
}
|
}
|
||||||
|
@ -718,7 +750,7 @@ func (statement *Statement) genGetSql(bean interface{}) (string, []interface{})
|
||||||
|
|
||||||
colNames, args := buildConditions(statement.Engine, table, bean, true, true,
|
colNames, args := buildConditions(statement.Engine, table, bean, true, true,
|
||||||
false, true, statement.allUseBool, statement.useAllCols,
|
false, true, statement.allUseBool, statement.useAllCols,
|
||||||
statement.mustColumnMap)
|
statement.mustColumnMap, false)
|
||||||
|
|
||||||
statement.ConditionStr = strings.Join(colNames, " "+statement.Engine.dialect.AndStr()+" ")
|
statement.ConditionStr = strings.Join(colNames, " "+statement.Engine.dialect.AndStr()+" ")
|
||||||
statement.BeanArgs = args
|
statement.BeanArgs = args
|
||||||
|
@ -757,16 +789,16 @@ func (statement *Statement) genCountSql(bean interface{}) (string, []interface{}
|
||||||
statement.RefTable = table
|
statement.RefTable = table
|
||||||
|
|
||||||
colNames, args := buildConditions(statement.Engine, table, bean, true, true, false,
|
colNames, args := buildConditions(statement.Engine, table, bean, true, true, false,
|
||||||
true, statement.allUseBool, statement.useAllCols, statement.mustColumnMap)
|
true, statement.allUseBool, statement.useAllCols, statement.mustColumnMap, false)
|
||||||
|
|
||||||
statement.ConditionStr = strings.Join(colNames, " AND ")
|
statement.ConditionStr = strings.Join(colNames, " "+statement.Engine.Dialect().AndStr()+" ")
|
||||||
statement.BeanArgs = args
|
statement.BeanArgs = args
|
||||||
// count(index fieldname) > count(0) > count(*)
|
// count(index fieldname) > count(0) > count(*)
|
||||||
var id string = "0"
|
var id string = "0"
|
||||||
if len(table.PrimaryKeys) == 1 {
|
if statement.Engine.Dialect().DBType() == "ql" {
|
||||||
id = statement.Engine.Quote(table.PrimaryKeys[0])
|
id = ""
|
||||||
}
|
}
|
||||||
return statement.genSelectSql(fmt.Sprintf("COUNT(%v) AS %v", id, statement.Engine.Quote("total"))), append(statement.Params, statement.BeanArgs...)
|
return statement.genSelectSql(fmt.Sprintf("count(%v) AS %v", id, statement.Engine.Quote("total"))), append(statement.Params, statement.BeanArgs...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (statement *Statement) genSelectSql(columnStr string) (a string) {
|
func (statement *Statement) genSelectSql(columnStr string) (a string) {
|
||||||
|
@ -789,7 +821,8 @@ func (statement *Statement) genSelectSql(columnStr string) (a string) {
|
||||||
if statement.WhereStr != "" {
|
if statement.WhereStr != "" {
|
||||||
a = fmt.Sprintf("%v WHERE %v", a, statement.WhereStr)
|
a = fmt.Sprintf("%v WHERE %v", a, statement.WhereStr)
|
||||||
if statement.ConditionStr != "" {
|
if statement.ConditionStr != "" {
|
||||||
a = fmt.Sprintf("%v AND %v", a, statement.ConditionStr)
|
a = fmt.Sprintf("%v %v %v", a, statement.Engine.Dialect().AndStr(),
|
||||||
|
statement.ConditionStr)
|
||||||
}
|
}
|
||||||
} else if statement.ConditionStr != "" {
|
} else if statement.ConditionStr != "" {
|
||||||
a = fmt.Sprintf("%v WHERE %v", a, statement.ConditionStr)
|
a = fmt.Sprintf("%v WHERE %v", a, statement.ConditionStr)
|
||||||
|
@ -822,11 +855,19 @@ func (statement *Statement) genSelectSql(columnStr string) (a string) {
|
||||||
|
|
||||||
func (statement *Statement) processIdParam() {
|
func (statement *Statement) processIdParam() {
|
||||||
if statement.IdParam != nil {
|
if statement.IdParam != nil {
|
||||||
for i, col := range statement.RefTable.PKColumns() {
|
if statement.Engine.dialect.DBType() != "ql" {
|
||||||
if i < len(*(statement.IdParam)) {
|
for i, col := range statement.RefTable.PKColumns() {
|
||||||
statement.And(fmt.Sprintf("%v=?", statement.Engine.Quote(col.Name)), (*(statement.IdParam))[i])
|
if i < len(*(statement.IdParam)) {
|
||||||
} else {
|
statement.And(fmt.Sprintf("%v %s ?", statement.Engine.Quote(col.Name),
|
||||||
statement.And(fmt.Sprintf("%v=?", statement.Engine.Quote(col.Name)), "")
|
statement.Engine.dialect.EqStr()), (*(statement.IdParam))[i])
|
||||||
|
} else {
|
||||||
|
statement.And(fmt.Sprintf("%v %s ?", statement.Engine.Quote(col.Name),
|
||||||
|
statement.Engine.dialect.EqStr()), "")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if len(*(statement.IdParam)) <= 1 {
|
||||||
|
statement.And("id() == ?", (*(statement.IdParam))[0])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue