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  }