xormplus hace 9 años
padre
commit
9605885616
Se han modificado 4 ficheros con 38 adiciones y 34 borrados
  1. 5 8
      engine.go
  2. 1 1
      helpers.go
  3. 31 24
      session.go
  4. 1 1
      xorm.go

+ 5 - 8
engine.go

@@ -1324,16 +1324,13 @@ func (engine *Engine) Sync(beans ...interface{}) error {
 			}
 			}
 		} else {
 		} else {
 			for _, col := range table.Columns() {
 			for _, col := range table.Columns() {
-				session := engine.NewSession()
-				session.Statement.RefTable = table
-				defer session.Close()
-				isExist, err := session.Engine.dialect.IsColumnExist(tableName, col.Name)
+				isExist, err := engine.dialect.IsColumnExist(tableName, col.Name)
 				if err != nil {
 				if err != nil {
 					return err
 					return err
 				}
 				}
 				if !isExist {
 				if !isExist {
 					session := engine.NewSession()
 					session := engine.NewSession()
-					session.Statement.RefTable = table
+					session.Statement.setRefValue(v)
 					defer session.Close()
 					defer session.Close()
 					err = session.addColumn(col.Name)
 					err = session.addColumn(col.Name)
 					if err != nil {
 					if err != nil {
@@ -1344,7 +1341,7 @@ func (engine *Engine) Sync(beans ...interface{}) error {
 
 
 			for name, index := range table.Indexes {
 			for name, index := range table.Indexes {
 				session := engine.NewSession()
 				session := engine.NewSession()
-				session.Statement.RefTable = table
+				session.Statement.setRefValue(v)
 				defer session.Close()
 				defer session.Close()
 				if index.Type == core.UniqueType {
 				if index.Type == core.UniqueType {
 					//isExist, err := session.isIndexExist(table.Name, name, true)
 					//isExist, err := session.isIndexExist(table.Name, name, true)
@@ -1354,7 +1351,7 @@ func (engine *Engine) Sync(beans ...interface{}) error {
 					}
 					}
 					if !isExist {
 					if !isExist {
 						session := engine.NewSession()
 						session := engine.NewSession()
-						session.Statement.RefTable = table
+						session.Statement.setRefValue(v)
 						defer session.Close()
 						defer session.Close()
 						err = session.addUnique(tableName, name)
 						err = session.addUnique(tableName, name)
 						if err != nil {
 						if err != nil {
@@ -1368,7 +1365,7 @@ func (engine *Engine) Sync(beans ...interface{}) error {
 					}
 					}
 					if !isExist {
 					if !isExist {
 						session := engine.NewSession()
 						session := engine.NewSession()
-						session.Statement.RefTable = table
+						session.Statement.setRefValue(v)
 						defer session.Close()
 						defer session.Close()
 						err = session.addIndex(tableName, name)
 						err = session.addIndex(tableName, name)
 						if err != nil {
 						if err != nil {

+ 1 - 1
helpers.go

@@ -550,7 +550,7 @@ func genCols(table *core.Table, session *Session, bean interface{}, useCol bool,
 			}
 			}
 		}
 		}
 
 
-		if (col.IsCreated || col.IsUpdated) && session.Statement.UseAutoTime && isZero(fieldValue.Interface()) {
+		if (col.IsCreated || col.IsUpdated) && session.Statement.UseAutoTime /*&& isZero(fieldValue.Interface())*/ {
 			// if time is non-empty, then set to auto time
 			// if time is non-empty, then set to auto time
 			val, t := session.Engine.NowTime2(col.SQLType.Name)
 			val, t := session.Engine.NowTime2(col.SQLType.Name)
 			args = append(args, val)
 			args = append(args, val)

+ 31 - 24
session.go

@@ -685,6 +685,7 @@ func (session *Session) canCache() bool {
 	if session.Statement.RefTable == nil ||
 	if session.Statement.RefTable == nil ||
 		session.Statement.JoinStr != "" ||
 		session.Statement.JoinStr != "" ||
 		session.Statement.RawSQL != "" ||
 		session.Statement.RawSQL != "" ||
+		!session.Statement.UseCache ||
 		session.Tx != nil ||
 		session.Tx != nil ||
 		len(session.Statement.selectStr) > 0 {
 		len(session.Statement.selectStr) > 0 {
 		return false
 		return false
@@ -763,7 +764,7 @@ func (session *Session) cacheGet(bean interface{}, sqlStr string, args ...interf
 		}
 		}
 		cacheBean := cacher.GetBean(tableName, sid)
 		cacheBean := cacher.GetBean(tableName, sid)
 		if cacheBean == nil {
 		if cacheBean == nil {
-			newSession := session.Engine.NewSession()
+			/*newSession := session.Engine.NewSession()
 			defer newSession.Close()
 			defer newSession.Close()
 			cacheBean = reflect.New(structValue.Type()).Interface()
 			cacheBean = reflect.New(structValue.Type()).Interface()
 			newSession.Id(id).NoCache()
 			newSession.Id(id).NoCache()
@@ -774,6 +775,9 @@ func (session *Session) cacheGet(bean interface{}, sqlStr string, args ...interf
 				newSession.NoCascade()
 				newSession.NoCascade()
 			}
 			}
 			has, err = newSession.Get(cacheBean)
 			has, err = newSession.Get(cacheBean)
+			*/
+			cacheBean = bean
+			has, err = session.nocacheGet(cacheBean, sqlStr, args...)
 			if err != nil || !has {
 			if err != nil || !has {
 				return has, err
 				return has, err
 			}
 			}
@@ -1030,6 +1034,30 @@ func (session *Session) doPrepare(sqlStr string) (stmt *core.Stmt, err error) {
 	return
 	return
 }
 }
 
 
+func (session *Session) nocacheGet(bean interface{}, sqlStr string, args ...interface{}) (bool, error) {
+	var rawRows *core.Rows
+	var err error
+	session.queryPreprocess(&sqlStr, args...)
+	if session.IsAutoCommit {
+		_, rawRows, err = session.innerQuery(sqlStr, args...)
+	} else {
+		rawRows, err = session.Tx.Query(sqlStr, args...)
+	}
+	if err != nil {
+		return false, err
+	}
+
+	defer rawRows.Close()
+
+	if rawRows.Next() {
+		if fields, err := rawRows.Columns(); err == nil {
+			err = session.row2Bean(rawRows, fields, len(fields), bean)
+		}
+		return true, err
+	}
+	return false, nil
+}
+
 // Get retrieve one record from database, bean's non-empty fields
 // Get retrieve one record from database, bean's non-empty fields
 // will be as conditions
 // will be as conditions
 func (session *Session) Get(bean interface{}) (bool, error) {
 func (session *Session) Get(bean interface{}) (bool, error) {
@@ -1054,9 +1082,8 @@ func (session *Session) Get(bean interface{}) (bool, error) {
 		args = session.Statement.RawParams
 		args = session.Statement.RawParams
 	}
 	}
 
 
-	if session.Statement.JoinStr == "" {
+	if session.canCache() {
 		if cacher := session.Engine.getCacher2(session.Statement.RefTable); cacher != nil &&
 		if cacher := session.Engine.getCacher2(session.Statement.RefTable); cacher != nil &&
-			session.Statement.UseCache &&
 			!session.Statement.unscoped {
 			!session.Statement.unscoped {
 			has, err := session.cacheGet(bean, sqlStr, args...)
 			has, err := session.cacheGet(bean, sqlStr, args...)
 			if err != ErrCacheFailed {
 			if err != ErrCacheFailed {
@@ -1065,27 +1092,7 @@ func (session *Session) Get(bean interface{}) (bool, error) {
 		}
 		}
 	}
 	}
 
 
-	var rawRows *core.Rows
-	var err error
-	session.queryPreprocess(&sqlStr, args...)
-	if session.IsAutoCommit {
-		_, rawRows, err = session.innerQuery(sqlStr, args...)
-	} else {
-		rawRows, err = session.Tx.Query(sqlStr, args...)
-	}
-	if err != nil {
-		return false, err
-	}
-
-	defer rawRows.Close()
-
-	if rawRows.Next() {
-		if fields, err := rawRows.Columns(); err == nil {
-			err = session.row2Bean(rawRows, fields, len(fields), bean)
-		}
-		return true, err
-	}
-	return false, nil
+	return session.nocacheGet(bean, sqlStr, args...)
 }
 }
 
 
 // Count counts the records. bean's non-empty fields
 // Count counts the records. bean's non-empty fields

+ 1 - 1
xorm.go

@@ -17,7 +17,7 @@ import (
 
 
 const (
 const (
 	// Version show the xorm's version
 	// Version show the xorm's version
-	Version string = "0.6.0.1016"
+	Version string = "0.6.0.1022"
 )
 )
 
 
 func regDrvsNDialects() bool {
 func regDrvsNDialects() bool {