Merge pull request #12 from chaunceyjiang/tableName

gee-orm: support user-defined table names
This commit is contained in:
Dai Jie
2020-10-12 14:30:32 +08:00
committed by GitHub
12 changed files with 168 additions and 10 deletions
+12 -1
View File
@@ -37,12 +37,23 @@ func (schema *Schema) RecordValues(dest interface{}) []interface{} {
return fieldValues
}
type ITableName interface {
TableName() string
}
// Parse a struct to a Schema instance
func Parse(dest interface{}, d dialect.Dialect) *Schema {
modelType := reflect.Indirect(reflect.ValueOf(dest)).Type()
var tableName string
t, ok := dest.(ITableName)
if !ok {
tableName = modelType.Name()
} else {
tableName = t.TableName()
}
schema := &Schema{
Model: dest,
Name: modelType.Name(),
Name: tableName,
fieldMap: make(map[string]*Field),
}
@@ -33,3 +33,19 @@ func TestSchema_RecordValues(t *testing.T) {
t.Fatal("failed to get values")
}
}
type UserTest struct {
Name string `geeorm:"PRIMARY KEY"`
Age int
}
func (u *UserTest) TableName() string {
return "ns_user_test"
}
func TestSchema_TableName(t *testing.T) {
schema := Parse(&UserTest{}, TestDial)
if schema.Name != "ns_user_test" || len(schema.Fields) != 2 {
t.Fatal("failed to parse User struct")
}
}
+12 -2
View File
@@ -37,15 +37,25 @@ func (schema *Schema) RecordValues(dest interface{}) []interface{} {
return fieldValues
}
type ITableName interface {
TableName() string
}
// Parse a struct to a Schema instance
func Parse(dest interface{}, d dialect.Dialect) *Schema {
modelType := reflect.Indirect(reflect.ValueOf(dest)).Type()
var tableName string
t, ok := dest.(ITableName)
if !ok {
tableName = modelType.Name()
} else {
tableName = t.TableName()
}
schema := &Schema{
Model: dest,
Name: modelType.Name(),
Name: tableName,
fieldMap: make(map[string]*Field),
}
for i := 0; i < modelType.NumField(); i++ {
p := modelType.Field(i)
if !p.Anonymous && ast.IsExported(p.Name) {
@@ -33,3 +33,19 @@ func TestSchema_RecordValues(t *testing.T) {
t.Fatal("failed to get values")
}
}
type UserTest struct {
Name string `geeorm:"PRIMARY KEY"`
Age int
}
func (u *UserTest) TableName() string {
return "ns_user_test"
}
func TestSchema_TableName(t *testing.T) {
schema := Parse(&UserTest{}, TestDial)
if schema.Name != "ns_user_test" || len(schema.Fields) != 2 {
t.Fatal("failed to parse User struct")
}
}
+12 -2
View File
@@ -37,15 +37,25 @@ func (schema *Schema) RecordValues(dest interface{}) []interface{} {
return fieldValues
}
type ITableName interface {
TableName() string
}
// Parse a struct to a Schema instance
func Parse(dest interface{}, d dialect.Dialect) *Schema {
modelType := reflect.Indirect(reflect.ValueOf(dest)).Type()
var tableName string
t, ok := dest.(ITableName)
if !ok {
tableName = modelType.Name()
} else {
tableName = t.TableName()
}
schema := &Schema{
Model: dest,
Name: modelType.Name(),
Name: tableName,
fieldMap: make(map[string]*Field),
}
for i := 0; i < modelType.NumField(); i++ {
p := modelType.Field(i)
if !p.Anonymous && ast.IsExported(p.Name) {
@@ -33,3 +33,19 @@ func TestSchema_RecordValues(t *testing.T) {
t.Fatal("failed to get values")
}
}
type UserTest struct {
Name string `geeorm:"PRIMARY KEY"`
Age int
}
func (u *UserTest) TableName() string {
return "ns_user_test"
}
func TestSchema_TableName(t *testing.T) {
schema := Parse(&UserTest{}, TestDial)
if schema.Name != "ns_user_test" || len(schema.Fields) != 2 {
t.Fatal("failed to parse User struct")
}
}
+12 -1
View File
@@ -37,12 +37,23 @@ func (schema *Schema) RecordValues(dest interface{}) []interface{} {
return fieldValues
}
type ITableName interface {
TableName() string
}
// Parse a struct to a Schema instance
func Parse(dest interface{}, d dialect.Dialect) *Schema {
modelType := reflect.Indirect(reflect.ValueOf(dest)).Type()
var tableName string
t, ok := dest.(ITableName)
if !ok {
tableName = modelType.Name()
} else {
tableName = t.TableName()
}
schema := &Schema{
Model: dest,
Name: modelType.Name(),
Name: tableName,
fieldMap: make(map[string]*Field),
}
+16
View File
@@ -33,3 +33,19 @@ func TestSchema_RecordValues(t *testing.T) {
t.Fatal("failed to get values")
}
}
type UserTest struct {
Name string `geeorm:"PRIMARY KEY"`
Age int
}
func (u *UserTest) TableName() string {
return "ns_user_test"
}
func TestSchema_TableName(t *testing.T) {
schema := Parse(&UserTest{}, TestDial)
if schema.Name != "ns_user_test" || len(schema.Fields) != 2 {
t.Fatal("failed to parse User struct")
}
}
+12 -2
View File
@@ -37,15 +37,25 @@ func (schema *Schema) RecordValues(dest interface{}) []interface{} {
return fieldValues
}
type ITableName interface {
TableName() string
}
// Parse a struct to a Schema instance
func Parse(dest interface{}, d dialect.Dialect) *Schema {
modelType := reflect.Indirect(reflect.ValueOf(dest)).Type()
var tableName string
t, ok := dest.(ITableName)
if !ok {
tableName = modelType.Name()
} else {
tableName = t.TableName()
}
schema := &Schema{
Model: dest,
Name: modelType.Name(),
Name: tableName,
fieldMap: make(map[string]*Field),
}
for i := 0; i < modelType.NumField(); i++ {
p := modelType.Field(i)
if !p.Anonymous && ast.IsExported(p.Name) {
@@ -33,3 +33,19 @@ func TestSchema_RecordValues(t *testing.T) {
t.Fatal("failed to get values")
}
}
type UserTest struct {
Name string `geeorm:"PRIMARY KEY"`
Age int
}
func (u *UserTest) TableName() string {
return "ns_user_test"
}
func TestSchema_TableName(t *testing.T) {
schema := Parse(&UserTest{}, TestDial)
if schema.Name != "ns_user_test" || len(schema.Fields) != 2 {
t.Fatal("failed to parse User struct")
}
}
+12 -2
View File
@@ -37,15 +37,25 @@ func (schema *Schema) RecordValues(dest interface{}) []interface{} {
return fieldValues
}
type ITableName interface {
TableName() string
}
// Parse a struct to a Schema instance
func Parse(dest interface{}, d dialect.Dialect) *Schema {
modelType := reflect.Indirect(reflect.ValueOf(dest)).Type()
var tableName string
t, ok := dest.(ITableName)
if !ok {
tableName = modelType.Name()
} else {
tableName = t.TableName()
}
schema := &Schema{
Model: dest,
Name: modelType.Name(),
Name: tableName,
fieldMap: make(map[string]*Field),
}
for i := 0; i < modelType.NumField(); i++ {
p := modelType.Field(i)
if !p.Anonymous && ast.IsExported(p.Name) {
@@ -33,3 +33,19 @@ func TestSchema_RecordValues(t *testing.T) {
t.Fatal("failed to get values")
}
}
type UserTest struct {
Name string `geeorm:"PRIMARY KEY"`
Age int
}
func (u *UserTest) TableName() string {
return "ns_user_test"
}
func TestSchema_TableName(t *testing.T) {
schema := Parse(&UserTest{}, TestDial)
if schema.Name != "ns_user_test" || len(schema.Fields) != 2 {
t.Fatal("failed to parse User struct")
}
}