Improve sql builder test for all dialects.
Improve assertEqualSQL test helper for ignore quotes in SQL.
This commit is contained in:
		
							parent
							
								
									4cd089df1d
								
							
						
					
					
						commit
						76fbf11b85
					
				@ -8,7 +8,7 @@ import (
 | 
				
			|||||||
	"gorm.io/gorm"
 | 
						"gorm.io/gorm"
 | 
				
			||||||
	"gorm.io/gorm/clause"
 | 
						"gorm.io/gorm/clause"
 | 
				
			||||||
	. "gorm.io/gorm/utils/tests"
 | 
						. "gorm.io/gorm/utils/tests"
 | 
				
			||||||
	"os"
 | 
					
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -291,18 +291,15 @@ func TestFromWithJoins(t *testing.T) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestToSQL(t *testing.T) {
 | 
					func TestToSQL(t *testing.T) {
 | 
				
			||||||
	// only test in PostgreSQL
 | 
					 | 
				
			||||||
	var dialect = os.Getenv("GORM_DIALECT")
 | 
					 | 
				
			||||||
	if dialect != "postgres" {
 | 
					 | 
				
			||||||
		t.Skipf("Skipping test for %s database", dialect)
 | 
					 | 
				
			||||||
		return
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// By default DB.DryRun should false
 | 
						// By default DB.DryRun should false
 | 
				
			||||||
	if DB.DryRun {
 | 
						if DB.DryRun {
 | 
				
			||||||
		t.Fatal("Failed expect DB.DryRun to be false")
 | 
							t.Fatal("Failed expect DB.DryRun to be false")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if DB.Dialector.Name() == "sqlserver" {
 | 
				
			||||||
 | 
							t.Skip("Skip SQL Server for this test, because it too difference with other dialects.")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	date, _ := time.Parse("2006-01-02", "2021-10-18")
 | 
						date, _ := time.Parse("2006-01-02", "2021-10-18")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// find
 | 
						// find
 | 
				
			||||||
@ -383,15 +380,45 @@ func TestToSQL(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// assertEqualSQL for assert that the sql is equal, this method will ignore quote, and dialect speicals.
 | 
				
			||||||
func assertEqualSQL(t *testing.T, expected string, actually string) {
 | 
					func assertEqualSQL(t *testing.T, expected string, actually string) {
 | 
				
			||||||
	t.Helper()
 | 
						t.Helper()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// ignore updated_at value
 | 
						// replace SQL quote, convert into postgresql like ""
 | 
				
			||||||
	var updatedAtRe = regexp.MustCompile(`"updated_at"='.+?'`)
 | 
						expected = replaceQuoteInSQL(expected)
 | 
				
			||||||
	actually = updatedAtRe.ReplaceAllString(actually, `"updated_at"='?'`)
 | 
						actually = replaceQuoteInSQL(actually)
 | 
				
			||||||
	expected = updatedAtRe.ReplaceAllString(expected, `"updated_at"='?'`)
 | 
					
 | 
				
			||||||
 | 
						// ignore updated_at value, becase it's generated in Gorm inernal, can't to mock value on update.
 | 
				
			||||||
 | 
						var updatedAtRe = regexp.MustCompile(`(?i)"updated_at"=".+?"`)
 | 
				
			||||||
 | 
						actually = updatedAtRe.ReplaceAllString(actually, `"updated_at"=?`)
 | 
				
			||||||
 | 
						expected = updatedAtRe.ReplaceAllString(expected, `"updated_at"=?`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// ignore RETURNING "id" (only in PostgreSQL)
 | 
				
			||||||
 | 
						var returningRe = regexp.MustCompile(`(?i)RETURNING "id"`)
 | 
				
			||||||
 | 
						actually = returningRe.ReplaceAllString(actually, ``)
 | 
				
			||||||
 | 
						expected = returningRe.ReplaceAllString(expected, ``)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						actually = strings.TrimSpace(actually)
 | 
				
			||||||
 | 
						expected = strings.TrimSpace(expected)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if actually != expected {
 | 
						if actually != expected {
 | 
				
			||||||
		t.Fatalf("Failed generate save SQL\nexpected: %s\nactually: %s", expected, actually)
 | 
							t.Fatalf("\nexpected: %s\nactually: %s", expected, actually)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func replaceQuoteInSQL(sql string) string {
 | 
				
			||||||
 | 
						// convert single quote into double quote
 | 
				
			||||||
 | 
						sql = strings.Replace(sql, `'`, `"`, -1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// convert dialect speical quote into double quote
 | 
				
			||||||
 | 
						switch DB.Dialector.Name() {
 | 
				
			||||||
 | 
						case "postgres":
 | 
				
			||||||
 | 
							sql = strings.Replace(sql, `"`, `"`, -1)
 | 
				
			||||||
 | 
						case "mysql", "sqlite":
 | 
				
			||||||
 | 
							sql = strings.Replace(sql, "`", `"`, -1)
 | 
				
			||||||
 | 
						case "sqlserver":
 | 
				
			||||||
 | 
							sql = strings.Replace(sql, `'`, `"`, -1)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return sql
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user