oracle drop table fixed

This commit is contained in:
Lunny Xiao 2015-03-13 15:20:24 +08:00
parent ba131dd9a0
commit 044198f373
2 changed files with 47 additions and 11 deletions

View File

@ -565,10 +565,18 @@ func (db *oracle) SupportCharset() bool {
return false return false
} }
func (db *oracle) SupportDropIfExists() bool {
return false
}
func (db *oracle) IndexOnTable() bool { func (db *oracle) IndexOnTable() bool {
return false return false
} }
func (db *oracle) DropTableSql(tableName string) string {
return fmt.Sprintf("DROP TABLE `%s`", tableName)
}
func (b *oracle) CreateTableSql(table *core.Table, tableName, storeEngine, charset string) string { func (b *oracle) CreateTableSql(table *core.Table, tableName, storeEngine, charset string) string {
var sql string var sql string
sql = "CREATE TABLE " sql = "CREATE TABLE "

View File

@ -563,7 +563,7 @@ func (session *Session) DropIndexes(bean interface{}) error {
} }
// DropTable drop a table and all indexes of the table // DropTable drop a table and all indexes of the table
func (session *Session) DropTable(bean interface{}) error { /*func (session *Session) DropTable(bean interface{}) error {
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
@ -583,6 +583,30 @@ func (session *Session) DropTable(bean interface{}) error {
sqlStr := session.Engine.Dialect().DropTableSql(session.Statement.TableName()) sqlStr := session.Engine.Dialect().DropTableSql(session.Statement.TableName())
_, err := session.exec(sqlStr) _, err := session.exec(sqlStr)
return err return err
}*/
func (session *Session) DropTable(beanOrTableName interface{}) error {
tableName, err := session.Engine.tableName(beanOrTableName)
if err != nil {
return err
}
var needDrop = true
if !session.Engine.dialect.SupportDropIfExists() {
sqlStr, args := session.Engine.dialect.TableCheckSql(tableName)
results, err := session.query(sqlStr, args...)
if err != nil {
return err
}
needDrop = len(results) > 0
}
if needDrop {
sqlStr := session.Engine.Dialect().DropTableSql(tableName)
_, err = session.exec(sqlStr)
return err
}
return nil
} }
func (statement *Statement) JoinColumns(cols []*core.Column) string { func (statement *Statement) JoinColumns(cols []*core.Column) string {
@ -1367,16 +1391,21 @@ func (session *Session) isColumnExist(tableName string, col *core.Column) (bool,
//return len(results) > 0, err //return len(results) > 0, err
}*/ }*/
func (session *Session) IsTableExist(beanOrTableName interface{}) (bool, error) { func (engine *Engine) tableName(beanOrTableName interface{}) (string, error) {
v := rValue(beanOrTableName) v := rValue(beanOrTableName)
var tableName string
if v.Type().Kind() == reflect.String { if v.Type().Kind() == reflect.String {
tableName = beanOrTableName.(string) return beanOrTableName.(string), nil
} else if v.Type().Kind() == reflect.Struct { } else if v.Type().Kind() == reflect.Struct {
table := session.Engine.autoMapType(v) table := engine.autoMapType(v)
tableName = table.Name return table.Name, nil
} else { }
return false, errors.New("bean should be a struct or struct's point") return "", errors.New("bean should be a struct or struct's point")
}
func (session *Session) IsTableExist(beanOrTableName interface{}) (bool, error) {
tableName, err := session.Engine.tableName(beanOrTableName)
if err != nil {
return false, err
} }
return session.isTableExist(tableName) return session.isTableExist(tableName)
@ -1507,9 +1536,8 @@ func (session *Session) dropAll() error {
for _, table := range session.Engine.Tables { for _, table := range session.Engine.Tables {
session.Statement.Init() session.Statement.Init()
session.Statement.RefTable = table session.Statement.RefTable = table
err := session.Engine.Dialect().MustDropTable(session.Statement.TableName()) sqlStr := session.Engine.Dialect().DropTableSql(session.Statement.TableName())
//sqlStr := session.Statement.genDropSQL() _, err := session.exec(sqlStr)
//_, err := session.exec(sqlStr)
if err != nil { if err != nil {
return err return err
} }