diff --git a/session.go b/session.go index f68257ff..41f41ab2 100644 --- a/session.go +++ b/session.go @@ -337,15 +337,21 @@ func (session *Session) CreateTable(bean interface{}) error { sql := statement.genCreateSQL() _, err := session.Exec(sql) if err == nil { - sql = statement.genIndexSQL() - if len(sql) > 0 { + sqls := statement.genIndexSQL() + for _, sql := range sqls { _, err = session.Exec(sql) + if err != nil { + return err + } } } if err == nil { - sql = statement.genUniqueSQL() - if len(sql) > 0 { + sqls := statement.genUniqueSQL() + for _, sql := range sqls { _, err = session.Exec(sql) + if err != nil { + return err + } } } return err diff --git a/statement.go b/statement.go index 7fc28885..aa1cd510 100644 --- a/statement.go +++ b/statement.go @@ -241,22 +241,24 @@ func (statement *Statement) genCreateSQL() string { return sql } -func (statement *Statement) genIndexSQL() string { - var sql string = "" +func (statement *Statement) genIndexSQL() []string { + var sqls []string = make([]string, 0) for indexName, cols := range statement.RefTable.Indexes { - sql += fmt.Sprintf("CREATE INDEX IDX_%v_%v ON %v (%v);", statement.TableName(), indexName, + sql := fmt.Sprintf("CREATE INDEX IDX_%v_%v ON %v (%v);", statement.TableName(), indexName, statement.TableName(), strings.Join(cols, ",")) + sqls = append(sqls, sql) } - return sql + return sqls } -func (statement *Statement) genUniqueSQL() string { - var sql string = "" +func (statement *Statement) genUniqueSQL() []string { + var sqls []string = make([]string, 0) for indexName, cols := range statement.RefTable.Uniques { - sql += fmt.Sprintf("CREATE UNIQUE INDEX UQE_%v_%v ON %v (%v);", statement.TableName(), indexName, + sql := fmt.Sprintf("CREATE UNIQUE INDEX UQE_%v_%v ON %v (%v);", statement.TableName(), indexName, statement.TableName(), strings.Join(cols, ",")) + sqls = append(sqls, sql) } - return sql + return sqls } func (statement *Statement) genDropSQL() string {