Browse Source

add more tests for Sync2

* fix cols and distinct conflicts
xormplus 7 years ago
parent
commit
4ddaccb452
7 changed files with 49 additions and 8 deletions
  1. 1 1
      engine.go
  2. 8 0
      session_cols.go
  3. 3 5
      session_schema.go
  4. 13 0
      session_schema_test.go
  5. 1 1
      statement.go
  6. 22 0
      statement_test.go
  7. 1 1
      xorm.go

+ 1 - 1
engine.go

@@ -1197,7 +1197,7 @@ func (engine *Engine) Sync(beans ...interface{}) error {
 
 	for _, bean := range beans {
 		v := rValue(bean)
-		tableNameNoSchema := engine.tbNameNoSchema(v.Interface())
+		tableNameNoSchema := engine.TableName(bean)
 		table, err := engine.autoMapType(v)
 		if err != nil {
 			return err

+ 8 - 0
session_cols.go

@@ -47,6 +47,14 @@ func (m columnMap) contain(colName string) bool {
 	return false
 }
 
+func (m *columnMap) add(colName string) bool {
+	if m.contain(colName) {
+		return false
+	}
+	*m = append(*m, colName)
+	return true
+}
+
 func setColumnInt(bean interface{}, col *core.Column, t int64) {
 	v, err := col.ValueOf(bean)
 	if err != nil {

+ 3 - 5
session_schema.go

@@ -122,7 +122,7 @@ func (session *Session) DropTable(beanOrTableName interface{}) error {
 }
 
 func (session *Session) dropTable(beanOrTableName interface{}) error {
-	tableName := session.engine.tbNameNoSchema(beanOrTableName)
+	tableName := session.engine.TableName(beanOrTableName)
 	var needDrop = true
 	if !session.engine.dialect.SupportDropIfExists() {
 		sqlStr, args := session.engine.dialect.TableCheckSql(tableName)
@@ -147,7 +147,7 @@ func (session *Session) IsTableExist(beanOrTableName interface{}) (bool, error)
 		defer session.Close()
 	}
 
-	tableName := session.engine.tbNameNoSchema(beanOrTableName)
+	tableName := session.engine.TableName(beanOrTableName)
 
 	return session.isTableExist(tableName)
 }
@@ -163,7 +163,7 @@ func (session *Session) IsTableEmpty(bean interface{}) (bool, error) {
 	if session.isAutoClose {
 		defer session.Close()
 	}
-	return session.isTableEmpty(session.engine.tbNameNoSchema(bean))
+	return session.isTableEmpty(session.engine.TableName(bean))
 }
 
 func (session *Session) isTableEmpty(tableName string) (bool, error) {
@@ -356,7 +356,6 @@ func (session *Session) Sync2(beans ...interface{}) error {
 
 				if oriIndex != nil {
 					if oriIndex.Type != index.Type {
-
 						sql := engine.dialect.DropIndexSql(tbNameWithSchema, oriIndex)
 
 						if sql != "" {
@@ -376,7 +375,6 @@ func (session *Session) Sync2(beans ...interface{}) error {
 
 			for name2, index2 := range oriTable.Indexes {
 				if _, ok := foundIndexNames[name2]; !ok {
-
 					sql := engine.dialect.DropIndexSql(tbNameWithSchema, index2)
 
 					if sql != "" {

+ 13 - 0
session_schema_test.go

@@ -289,8 +289,21 @@ func TestSync2_2(t *testing.T) {
 
 	assert.NoError(t, prepareEngine())
 
+	var tableNames = make(map[string]bool)
 	for i := 0; i < 10; i++ {
 		tableName := fmt.Sprintf("test_sync2_index_%d", i)
+		tableNames[tableName] = true
 		assert.NoError(t, testEngine.Table(tableName).Sync2(new(TestSync2Index)))
+
+		exist, err := testEngine.IsTableExist(tableName)
+		assert.NoError(t, err)
+		assert.True(t, exist)
+	}
+
+	tables, err := testEngine.DBMetas()
+	assert.NoError(t, err)
+
+	for _, table := range tables {
+		assert.True(t, tableNames[table.Name])
 	}
 }

+ 1 - 1
statement.go

@@ -624,7 +624,7 @@ func (statement *Statement) Select(str string) *Statement {
 func (statement *Statement) Cols(columns ...string) *Statement {
 	cols := col2NewCols(columns...)
 	for _, nc := range cols {
-		statement.columnMap = append(statement.columnMap, nc)
+		statement.columnMap.add(nc)
 	}
 
 	newColumns := statement.colmap2NewColsWithQuote()

+ 22 - 0
statement_test.go

@@ -180,3 +180,25 @@ func createTestStatement() *Statement {
 	}
 	return nil
 }
+
+func TestDistinctAndCols(t *testing.T) {
+	type DistinctAndCols struct {
+		Id   int64
+		Name string
+	}
+
+	assert.NoError(t, prepareEngine())
+	assertSync(t, new(DistinctAndCols))
+
+	cnt, err := testEngine.Insert(&DistinctAndCols{
+		Name: "test",
+	})
+	assert.NoError(t, err)
+	assert.EqualValues(t, 1, cnt)
+
+	var names []string
+	err = testEngine.Table("distinct_and_cols").Cols("name").Distinct("name").Find(&names)
+	assert.NoError(t, err)
+	assert.EqualValues(t, 1, len(names))
+	assert.EqualValues(t, "test", names[0])
+}

+ 1 - 1
xorm.go

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