|
@@ -40,9 +40,10 @@ type Dialect interface {
|
|
|
DriverName() string
|
|
DriverName() string
|
|
|
DataSourceName() string
|
|
DataSourceName() string
|
|
|
|
|
|
|
|
- QuoteStr() string
|
|
|
|
|
IsReserved(string) bool
|
|
IsReserved(string) bool
|
|
|
Quote(string) string
|
|
Quote(string) string
|
|
|
|
|
+ // Deprecated: use Quote(string) string instead
|
|
|
|
|
+ QuoteStr() string
|
|
|
AndStr() string
|
|
AndStr() string
|
|
|
OrStr() string
|
|
OrStr() string
|
|
|
EqStr() string
|
|
EqStr() string
|
|
@@ -70,8 +71,8 @@ type Dialect interface {
|
|
|
|
|
|
|
|
ForUpdateSql(query string) string
|
|
ForUpdateSql(query string) string
|
|
|
|
|
|
|
|
- //CreateTableIfNotExists(table *Table, tableName, storeEngine, charset string) error
|
|
|
|
|
- //MustDropTable(tableName string) error
|
|
|
|
|
|
|
+ // CreateTableIfNotExists(table *Table, tableName, storeEngine, charset string) error
|
|
|
|
|
+ // MustDropTable(tableName string) error
|
|
|
|
|
|
|
|
GetColumns(tableName string) ([]string, map[string]*Column, error)
|
|
GetColumns(tableName string) ([]string, map[string]*Column, error)
|
|
|
GetTables() ([]*Table, error)
|
|
GetTables() ([]*Table, error)
|
|
@@ -85,6 +86,7 @@ func OpenDialect(dialect Dialect) (*DB, error) {
|
|
|
return Open(dialect.DriverName(), dialect.DataSourceName())
|
|
return Open(dialect.DriverName(), dialect.DataSourceName())
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// Base represents a basic dialect and all real dialects could embed this struct
|
|
|
type Base struct {
|
|
type Base struct {
|
|
|
db *DB
|
|
db *DB
|
|
|
dialect Dialect
|
|
dialect Dialect
|
|
@@ -172,8 +174,15 @@ func (db *Base) HasRecords(query string, args ...interface{}) (bool, error) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (db *Base) IsColumnExist(tableName, colName string) (bool, error) {
|
|
func (db *Base) IsColumnExist(tableName, colName string) (bool, error) {
|
|
|
- query := "SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = ? AND `TABLE_NAME` = ? AND `COLUMN_NAME` = ?"
|
|
|
|
|
- query = strings.Replace(query, "`", db.dialect.QuoteStr(), -1)
|
|
|
|
|
|
|
+ query := fmt.Sprintf(
|
|
|
|
|
+ "SELECT %v FROM %v.%v WHERE %v = ? AND %v = ? AND %v = ?",
|
|
|
|
|
+ db.dialect.Quote("COLUMN_NAME"),
|
|
|
|
|
+ db.dialect.Quote("INFORMATION_SCHEMA"),
|
|
|
|
|
+ db.dialect.Quote("COLUMNS"),
|
|
|
|
|
+ db.dialect.Quote("TABLE_SCHEMA"),
|
|
|
|
|
+ db.dialect.Quote("TABLE_NAME"),
|
|
|
|
|
+ db.dialect.Quote("COLUMN_NAME"),
|
|
|
|
|
+ )
|
|
|
return db.HasRecords(query, db.DbName, tableName, colName)
|
|
return db.HasRecords(query, db.DbName, tableName, colName)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -310,7 +319,7 @@ func RegisterDialect(dbName DbType, dialectFunc func() Dialect) {
|
|
|
dialects[strings.ToLower(string(dbName))] = dialectFunc // !nashtsai! allow override dialect
|
|
dialects[strings.ToLower(string(dbName))] = dialectFunc // !nashtsai! allow override dialect
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// QueryDialect query if registed database dialect
|
|
|
|
|
|
|
+// QueryDialect query if registered database dialect
|
|
|
func QueryDialect(dbName DbType) Dialect {
|
|
func QueryDialect(dbName DbType) Dialect {
|
|
|
if d, ok := dialects[strings.ToLower(string(dbName))]; ok {
|
|
if d, ok := dialects[strings.ToLower(string(dbName))]; ok {
|
|
|
return d()
|
|
return d()
|