github.com/systematiccaos/gorm@v1.22.6/utils/tests/dummy_dialecter.go (about) 1 package tests 2 3 import ( 4 "github.com/systematiccaos/gorm" 5 "github.com/systematiccaos/gorm/clause" 6 "github.com/systematiccaos/gorm/logger" 7 "github.com/systematiccaos/gorm/schema" 8 ) 9 10 type DummyDialector struct { 11 } 12 13 func (DummyDialector) Name() string { 14 return "dummy" 15 } 16 17 func (DummyDialector) Initialize(*gorm.DB) error { 18 return nil 19 } 20 21 func (DummyDialector) DefaultValueOf(field *schema.Field) clause.Expression { 22 return clause.Expr{SQL: "DEFAULT"} 23 } 24 25 func (DummyDialector) Migrator(*gorm.DB) gorm.Migrator { 26 return nil 27 } 28 29 func (DummyDialector) BindVarTo(writer clause.Writer, stmt *gorm.Statement, v interface{}) { 30 writer.WriteByte('?') 31 } 32 33 func (DummyDialector) QuoteTo(writer clause.Writer, str string) { 34 var ( 35 underQuoted, selfQuoted bool 36 continuousBacktick int8 37 shiftDelimiter int8 38 ) 39 40 for _, v := range []byte(str) { 41 switch v { 42 case '`': 43 continuousBacktick++ 44 if continuousBacktick == 2 { 45 writer.WriteString("``") 46 continuousBacktick = 0 47 } 48 case '.': 49 if continuousBacktick > 0 || !selfQuoted { 50 shiftDelimiter = 0 51 underQuoted = false 52 continuousBacktick = 0 53 writer.WriteString("`") 54 } 55 writer.WriteByte(v) 56 continue 57 default: 58 if shiftDelimiter-continuousBacktick <= 0 && !underQuoted { 59 writer.WriteByte('`') 60 underQuoted = true 61 if selfQuoted = continuousBacktick > 0; selfQuoted { 62 continuousBacktick -= 1 63 } 64 } 65 66 for ; continuousBacktick > 0; continuousBacktick -= 1 { 67 writer.WriteString("``") 68 } 69 70 writer.WriteByte(v) 71 } 72 shiftDelimiter++ 73 } 74 75 if continuousBacktick > 0 && !selfQuoted { 76 writer.WriteString("``") 77 } 78 writer.WriteString("`") 79 } 80 81 func (DummyDialector) Explain(sql string, vars ...interface{}) string { 82 return logger.ExplainSQL(sql, nil, `"`, vars...) 83 } 84 85 func (DummyDialector) DataTypeOf(*schema.Field) string { 86 return "" 87 }