Explorar o código

fix bug in oracle: engine.Table(tablename).Exist()

xormplus %!s(int64=6) %!d(string=hai) anos
pai
achega
e433bd6691
Modificáronse 2 ficheiros con 5 adicións e 1 borrados
  1. 1 1
      README.md
  2. 4 0
      session_exist.go

+ 1 - 1
README.md

@@ -480,7 +480,7 @@ id := engine.SqlTemplateClient(key, &paramMap).Query().Results[0]["id"] //返回
 
 * 事物的简写方法
  ```Go
-res, err := engine.Transaction(func(sess *xorm.Session) (interface{}, error) {
+res, err := engine.Transaction(func(session *xorm.Session) (interface{}, error) {
     user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()}
     if _, err := session.Insert(&user1); err != nil {
         return nil, err

+ 4 - 0
session_exist.go

@@ -42,6 +42,8 @@ func (session *Session) Exist(bean ...interface{}) (bool, error) {
 
 				if session.engine.dialect.DBType() == core.MSSQL {
 					sqlStr = fmt.Sprintf("SELECT TOP 1 * FROM %s WHERE %s", tableName, condSQL)
+				} else if session.engine.dialect.DBType() == core.ORACLE {
+					sqlStr = fmt.Sprintf("SELECT * FROM %s WHERE (%s) AND ROWNUM=1", tableName, condSQL)
 				} else {
 					sqlStr = fmt.Sprintf("SELECT * FROM %s WHERE %s LIMIT 1", tableName, condSQL)
 				}
@@ -49,6 +51,8 @@ func (session *Session) Exist(bean ...interface{}) (bool, error) {
 			} else {
 				if session.engine.dialect.DBType() == core.MSSQL {
 					sqlStr = fmt.Sprintf("SELECT TOP 1 * FROM %s", tableName)
+				} else if session.engine.dialect.DBType() == core.ORACLE {
+					sqlStr = fmt.Sprintf("SELECT * FROM  %s WHERE ROWNUM=1", tableName)
 				} else {
 					sqlStr = fmt.Sprintf("SELECT * FROM %s LIMIT 1", tableName)
 				}