diff --git a/.gitignore b/.gitignore index d18c8ca7..b16c22c8 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ _obj 6.out gorptest.bin tmp +.idea diff --git a/db.go b/db.go index a573bb8f..782a48ae 100644 --- a/db.go +++ b/db.go @@ -259,6 +259,7 @@ func (m *DbMap) readStructColumns(t reflect.Type) (cols []*ColumnMap, primaryKey var isAuto bool var isPK bool var isNotNull bool + var unique bool for _, argString := range cArguments[1:] { argString = strings.TrimSpace(argString) arg := strings.SplitN(argString, ":", 2) @@ -288,6 +289,8 @@ func (m *DbMap) readStructColumns(t reflect.Type) (cols []*ColumnMap, primaryKey isAuto = true case "notnull": isNotNull = true + case "unique": + unique = true default: panic(fmt.Sprintf("Unrecognized tag option for field %v: %v", f.Name, arg)) } @@ -333,6 +336,7 @@ func (m *DbMap) readStructColumns(t reflect.Type) (cols []*ColumnMap, primaryKey isAutoIncr: isAuto, isNotNull: isNotNull, MaxSize: maxSize, + Unique: unique, } if isPK { primaryKey = append(primaryKey, cm) diff --git a/dialect_mysql.go b/dialect_mysql.go index 3d7d3402..e0898948 100644 --- a/dialect_mysql.go +++ b/dialect_mysql.go @@ -19,7 +19,6 @@ import ( // Implementation of Dialect for MySQL databases. type MySQLDialect struct { - // Engine is the storage engine to use "InnoDB" vs "MyISAM" for example Engine string @@ -58,7 +57,6 @@ func (d MySQLDialect) ToSqlType(val reflect.Type, maxsize int, isAutoIncr bool) return "mediumblob" } } - switch val.Name() { case "NullInt64": return "bigint" @@ -66,8 +64,11 @@ func (d MySQLDialect) ToSqlType(val reflect.Type, maxsize int, isAutoIncr bool) return "double" case "NullBool": return "tinyint" - case "Time": + case "Time", "DateTime": return "datetime" + case "Date": + return "date" + } if maxsize < 1 { diff --git a/dialect_mysql_test.go b/dialect_mysql_test.go index d1018cf6..8ed05b1b 100644 --- a/dialect_mysql_test.go +++ b/dialect_mysql_test.go @@ -22,6 +22,7 @@ import ( . "github.com/onsi/gomega" "github.com/go-gorp/gorp" + "github.com/go-openapi/strfmt" ) var _ = Describe("MySQLDialect", func() { @@ -61,6 +62,7 @@ var _ = Describe("MySQLDialect", func() { Entry("NullFloat64", sql.NullFloat64{}, 0, false, "double"), Entry("NullBool", sql.NullBool{}, 0, false, "tinyint"), Entry("Time", time.Time{}, 0, false, "datetime"), + Entry("DateTime", strfmt.DateTime{}, 0, false, "datetime"), Entry("default-size string", "", 0, false, "varchar(255)"), Entry("sized string", "", 50, false, "varchar(50)"), Entry("large string", "", 1024, false, "text"), diff --git a/dialect_oracle.go b/dialect_oracle.go index c381380f..3b1fc524 100644 --- a/dialect_oracle.go +++ b/dialect_oracle.go @@ -59,7 +59,7 @@ func (d OracleDialect) ToSqlType(val reflect.Type, maxsize int, isAutoIncr bool) return "double precision" case "NullBool": return "boolean" - case "NullTime", "Time": + case "NullTime", "Time", "DateTime": return "timestamp with time zone" } diff --git a/dialect_postgres.go b/dialect_postgres.go index 6602b2f9..600d9a55 100644 --- a/dialect_postgres.go +++ b/dialect_postgres.go @@ -56,7 +56,7 @@ func (d PostgresDialect) ToSqlType(val reflect.Type, maxsize int, isAutoIncr boo return "double precision" case "NullBool": return "boolean" - case "Time", "NullTime": + case "Time", "NullTime","DateTime": return "timestamp with time zone" } diff --git a/dialect_sqlite.go b/dialect_sqlite.go index 7d9b2975..29243b79 100644 --- a/dialect_sqlite.go +++ b/dialect_sqlite.go @@ -45,8 +45,9 @@ func (d SqliteDialect) ToSqlType(val reflect.Type, maxsize int, isAutoIncr bool) return "real" case "NullBool": return "integer" - case "Time": + case "Time", "DateTime": return "datetime" + } if maxsize < 1 { diff --git a/dialect_sqlserver.go b/dialect_sqlserver.go index 8808af59..86782d04 100644 --- a/dialect_sqlserver.go +++ b/dialect_sqlserver.go @@ -66,7 +66,7 @@ func (d SqlServerDialect) ToSqlType(val reflect.Type, maxsize int, isAutoIncr bo return "float(53)" case "NullBool": return "bit" - case "NullTime", "Time": + case "NullTime", "Time","DateTime": if d.Version == "2005" { return "datetime" }