Add NewEngineWithParams method can call SetParams for dialect. The dialect_… (#798)
* Add NewEngine2 method can call SetArguments for dialect. The dialect_mysql support ROW_FORMAT in createtable. (https://github.com/go-xorm/xorm/issues/793) * Rename NewEngine2 to NewEngineWithParams * rename SetArguments to SetParams * rename SetArguments to SetParmas
This commit is contained in:
parent
b462eded54
commit
11743c1a80
|
@ -172,12 +172,33 @@ type mysql struct {
|
||||||
allowAllFiles bool
|
allowAllFiles bool
|
||||||
allowOldPasswords bool
|
allowOldPasswords bool
|
||||||
clientFoundRows bool
|
clientFoundRows bool
|
||||||
|
rowFormat string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *mysql) Init(d *core.DB, uri *core.Uri, drivername, dataSourceName string) error {
|
func (db *mysql) Init(d *core.DB, uri *core.Uri, drivername, dataSourceName string) error {
|
||||||
return db.Base.Init(d, db, uri, drivername, dataSourceName)
|
return db.Base.Init(d, db, uri, drivername, dataSourceName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (db *mysql) SetParams(params map[string]string) {
|
||||||
|
rowFormat, ok := params["rowFormat"]
|
||||||
|
if ok {
|
||||||
|
var t = strings.ToUpper(rowFormat)
|
||||||
|
switch t {
|
||||||
|
case "COMPACT":
|
||||||
|
fallthrough
|
||||||
|
case "REDUNDANT":
|
||||||
|
fallthrough
|
||||||
|
case "DYNAMIC":
|
||||||
|
fallthrough
|
||||||
|
case "COMPRESSED":
|
||||||
|
db.rowFormat = t
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (db *mysql) SqlType(c *core.Column) string {
|
func (db *mysql) SqlType(c *core.Column) string {
|
||||||
var res string
|
var res string
|
||||||
switch t := c.SQLType.Name; t {
|
switch t := c.SQLType.Name; t {
|
||||||
|
@ -487,6 +508,59 @@ func (db *mysql) GetIndexes(tableName string) (map[string]*core.Index, error) {
|
||||||
return indexes, nil
|
return indexes, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (db *mysql) CreateTableSql(table *core.Table, tableName, storeEngine, charset string) string {
|
||||||
|
var sql string
|
||||||
|
sql = "CREATE TABLE IF NOT EXISTS "
|
||||||
|
if tableName == "" {
|
||||||
|
tableName = table.Name
|
||||||
|
}
|
||||||
|
|
||||||
|
sql += db.Quote(tableName)
|
||||||
|
sql += " ("
|
||||||
|
|
||||||
|
if len(table.ColumnsSeq()) > 0 {
|
||||||
|
pkList := table.PrimaryKeys
|
||||||
|
|
||||||
|
for _, colName := range table.ColumnsSeq() {
|
||||||
|
col := table.GetColumn(colName)
|
||||||
|
if col.IsPrimaryKey && len(pkList) == 1 {
|
||||||
|
sql += col.String(db)
|
||||||
|
} else {
|
||||||
|
sql += col.StringNoPk(db)
|
||||||
|
}
|
||||||
|
sql = strings.TrimSpace(sql)
|
||||||
|
if len(col.Comment) > 0 {
|
||||||
|
sql += " COMMENT '" + col.Comment + "'"
|
||||||
|
}
|
||||||
|
sql += ", "
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(pkList) > 1 {
|
||||||
|
sql += "PRIMARY KEY ( "
|
||||||
|
sql += db.Quote(strings.Join(pkList, db.Quote(",")))
|
||||||
|
sql += " ), "
|
||||||
|
}
|
||||||
|
|
||||||
|
sql = sql[:len(sql)-2]
|
||||||
|
}
|
||||||
|
sql += ")"
|
||||||
|
|
||||||
|
if storeEngine != "" {
|
||||||
|
sql += " ENGINE=" + storeEngine
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(charset) == 0 {
|
||||||
|
charset = db.URI().Charset
|
||||||
|
} else if len(charset) > 0 {
|
||||||
|
sql += " DEFAULT CHARSET " + charset
|
||||||
|
}
|
||||||
|
|
||||||
|
if db.rowFormat != "" {
|
||||||
|
sql += " ROW_FORMAT=" + db.rowFormat
|
||||||
|
}
|
||||||
|
return sql
|
||||||
|
}
|
||||||
|
|
||||||
func (db *mysql) Filters() []core.Filter {
|
func (db *mysql) Filters() []core.Filter {
|
||||||
return []core.Filter{&core.IdFilter{}}
|
return []core.Filter{&core.IdFilter{}}
|
||||||
}
|
}
|
||||||
|
|
7
xorm.go
7
xorm.go
|
@ -108,6 +108,13 @@ func NewEngine(driverName string, dataSourceName string) (*Engine, error) {
|
||||||
return engine, nil
|
return engine, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewEngineWithParams new a db manager with params. The params will be passed to dialect.
|
||||||
|
func NewEngineWithParams(driverName string, dataSourceName string, params map[string]string) (*Engine, error) {
|
||||||
|
engine, err := NewEngine(driverName, dataSourceName)
|
||||||
|
engine.dialect.SetParams(params)
|
||||||
|
return engine, err
|
||||||
|
}
|
||||||
|
|
||||||
// Clone clone an engine
|
// Clone clone an engine
|
||||||
func (engine *Engine) Clone() (*Engine, error) {
|
func (engine *Engine) Clone() (*Engine, error) {
|
||||||
return NewEngine(engine.DriverName(), engine.DataSourceName())
|
return NewEngine(engine.DriverName(), engine.DataSourceName())
|
||||||
|
|
Loading…
Reference in New Issue