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
}
func (db *oracle) SupportDropIfExists() bool {
return false
}
func (db *oracle) IndexOnTable() bool {
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 {
var sql string
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
func (session *Session) DropTable(bean interface{}) error {
/*func (session *Session) DropTable(bean interface{}) error {
defer session.resetStatement()
if session.IsAutoClose {
defer session.Close()
@ -583,6 +583,30 @@ func (session *Session) DropTable(bean interface{}) error {
sqlStr := session.Engine.Dialect().DropTableSql(session.Statement.TableName())
_, err := session.exec(sqlStr)
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 {
@ -1367,16 +1391,21 @@ func (session *Session) isColumnExist(tableName string, col *core.Column) (bool,
//return len(results) > 0, err
}*/
func (session *Session) IsTableExist(beanOrTableName interface{}) (bool, error) {
func (engine *Engine) tableName(beanOrTableName interface{}) (string, error) {
v := rValue(beanOrTableName)
var tableName string
if v.Type().Kind() == reflect.String {
tableName = beanOrTableName.(string)
return beanOrTableName.(string), nil
} else if v.Type().Kind() == reflect.Struct {
table := session.Engine.autoMapType(v)
tableName = table.Name
} else {
return false, errors.New("bean should be a struct or struct's point")
table := engine.autoMapType(v)
return table.Name, nil
}
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)
@ -1507,9 +1536,8 @@ func (session *Session) dropAll() error {
for _, table := range session.Engine.Tables {
session.Statement.Init()
session.Statement.RefTable = table
err := session.Engine.Dialect().MustDropTable(session.Statement.TableName())
//sqlStr := session.Statement.genDropSQL()
//_, err := session.exec(sqlStr)
sqlStr := session.Engine.Dialect().DropTableSql(session.Statement.TableName())
_, err := session.exec(sqlStr)
if err != nil {
return err
}