forked from mirror/gorm
88 lines
1.7 KiB
Go
88 lines
1.7 KiB
Go
package tests
|
|
|
|
import (
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm/clause"
|
|
"gorm.io/gorm/logger"
|
|
"gorm.io/gorm/schema"
|
|
)
|
|
|
|
type DummyDialector struct {
|
|
}
|
|
|
|
func (DummyDialector) Name() string {
|
|
return "dummy"
|
|
}
|
|
|
|
func (DummyDialector) Initialize(*gorm.DB) error {
|
|
return nil
|
|
}
|
|
|
|
func (DummyDialector) DefaultValueOf(field *schema.Field) clause.Expression {
|
|
return clause.Expr{SQL: "DEFAULT"}
|
|
}
|
|
|
|
func (DummyDialector) Migrator(*gorm.DB) gorm.Migrator {
|
|
return nil
|
|
}
|
|
|
|
func (DummyDialector) BindVarTo(writer clause.Writer, stmt *gorm.Statement, v interface{}) {
|
|
writer.WriteByte('?')
|
|
}
|
|
|
|
func (DummyDialector) QuoteTo(writer clause.Writer, str string) {
|
|
var (
|
|
underQuoted, selfQuoted bool
|
|
continuousBacktick int8
|
|
shiftDelimiter int8
|
|
)
|
|
|
|
for _, v := range []byte(str) {
|
|
switch v {
|
|
case '`':
|
|
continuousBacktick++
|
|
if continuousBacktick == 2 {
|
|
writer.WriteString("``")
|
|
continuousBacktick = 0
|
|
}
|
|
case '.':
|
|
if continuousBacktick > 0 || !selfQuoted {
|
|
shiftDelimiter = 0
|
|
underQuoted = false
|
|
continuousBacktick = 0
|
|
writer.WriteString("`")
|
|
}
|
|
writer.WriteByte(v)
|
|
continue
|
|
default:
|
|
if shiftDelimiter-continuousBacktick <= 0 && !underQuoted {
|
|
writer.WriteByte('`')
|
|
underQuoted = true
|
|
if selfQuoted = continuousBacktick > 0; selfQuoted {
|
|
continuousBacktick -= 1
|
|
}
|
|
}
|
|
|
|
for ; continuousBacktick > 0; continuousBacktick -= 1 {
|
|
writer.WriteString("``")
|
|
}
|
|
|
|
writer.WriteByte(v)
|
|
}
|
|
shiftDelimiter++
|
|
}
|
|
|
|
if continuousBacktick > 0 && !selfQuoted {
|
|
writer.WriteString("``")
|
|
}
|
|
writer.WriteString("`")
|
|
}
|
|
|
|
func (DummyDialector) Explain(sql string, vars ...interface{}) string {
|
|
return logger.ExplainSQL(sql, nil, `"`, vars...)
|
|
}
|
|
|
|
func (DummyDialector) DataTypeOf(*schema.Field) string {
|
|
return ""
|
|
}
|