When create tables, Ignored some columns. #1911

Closed
opened 2021-05-24 19:46:34 +00:00 by myuna · 2 comments

environment:

  • go ver16.4
  • xorm verv1.1.0
  • mysql ver8.0.22(MySQL Server Community Server)

run this file.

go run tools/migrations/migration.go 

tools/migrations/migration.go

package main

import (
	_ "github.com/go-sql-driver/mysql"
	"log"
	"time"
	"xorm.io/xorm"
)
func GetDbInstance() (*xorm.Engine, error) {
	return xorm.NewEngine("mysql", "xxx:xxxxxx@tcp(172.17.0.1:3306)/xxx?charset=utf8mb4&parseTime=True")
}
type BaseModelLogicalDel struct {
	Id        string     `xorm:"varchar(46) pk"`
	CreatedAt time.Time  `xorm:"created"`
	UpdatedAt time.Time  `xorm:"updated"`
	DeletedAt *time.Time `xorm:"deleted"`
}
type TestPerson struct {
	BaseModelLogicalDel   `xorm:"extends"`
	UserId                string `xorm:"varchar(46) notnull"`
	PersonId              string `xorm:"varchar(46) notnull"`
	Star                  bool
	SortNo                int
	DispName              string `xorm:"varchar(100)"`
	FirstName             string
	LastName              string
	FirstNameKana         string
	LastNameKana          string
	BirthYear             *int
	BirthMonth            *int
	BirthDay              *int
	ImageId               string `xorm:"varchar(46)"`
	ImageDefaultId        string `xorm:"varchar(46)"`
	UserText              string `xorm:"varchar(2000)"`
	GenderId              *int
	At1     string `xorm:"varchar(10)"`
	At1Rate int
	At2     string `xorm:"varchar(10)"`
	At2Rate int
	At3      string `xorm:"varchar(10)"`
	At3Rate  int
	At4      string `xorm:"varchar(10)"`
	At4Rate  int
	At5          string `xorm:"varchar(10)"`
	At5Rate      int
	At6          string `xorm:"varchar(10)"`
	At6Rate      int
}
func ReCreateTable(db *xorm.Engine, model interface{}) error {
	if result, err := db.IsTableExist(model); err == nil && result {
		db.DropTables(model)
	} else {
		log.Println(result, err)
	}
	return db.CreateTables(model)
}
func main() {
	db, _ := GetDbInstance()
	db.ShowSQL(true)
	defer db.Close()
	ReCreateTable(db, TestPerson{})
}

log is below

[root@xxxxxx xxxxxx]# go run tools/migrations/migration.go 
[xorm] [info]  2021/05/24 19:40:55.026157 [SQL] SELECT `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? and `TABLE_NAME`=? [xxx test_person] - 2.137694ms
[xorm] [info]  2021/05/24 19:40:55.026434 [SQL] BEGIN TRANSACTION [] - 163.408µs
[xorm] [info]  2021/05/24 19:40:55.046072 [SQL] DROP TABLE IF EXISTS `test_person` [] - 19.609816ms
[xorm] [info]  2021/05/24 19:40:55.046292 [SQL] COMMIT [] - 179.228µs
[xorm] [info]  2021/05/24 19:40:55.046454 [SQL] BEGIN TRANSACTION [] - 137.387µs
[xorm] [info]  2021/05/24 19:40:55.058688 [SQL] CREATE TABLE IF NOT EXISTS `test_person` (
`id` VARCHAR(46) PRIMARY KEY NOT NULL, 
`created_at` DATETIME NULL, 
`updated_at` DATETIME NULL, 
`deleted_at` DATETIME NULL, 
`user_id` VARCHAR(46) NOT NULL, 
`person_id` VARCHAR(46) NOT NULL, 
`disp_name` VARCHAR(100) NULL, 
`image_id` VARCHAR(46) NULL, 
`image_default_id` VARCHAR(46) NULL, 
`user_text` VARCHAR(2000) NULL, 
`at1` VARCHAR(10) NULL, 
`at2` VARCHAR(10) NULL, 
`at3` VARCHAR(10) NULL, 
`at4` VARCHAR(10) NULL, 
`at5` VARCHAR(10) NULL, 
`at6` VARCHAR(10) NULL
) DEFAULT CHARSET utf8mb4 [] - 12.076371ms
[xorm] [info]  2021/05/24 19:40:55.058916 [SQL] COMMIT [] - 198.739µs

Some columns are ignored.
these columns are no "xorm" tag.

Star                  bool
SortNo                int
FirstName             string
LastName              string
FirstNameKana         string
LastNameKana          string
BirthYear             *int
BirthMonth            *int
BirthDay              *int
GenderId              *int
At1Rate int
At2Rate int
At3Rate  int
At4Rate  int
At5Rate      int
At6Rate      int

created table columns(by MySQL WorkBench)
image

When I use "github.com/go-xorm/xorm" instead of "xorm.io/xorm",
created above columns.

In "xorm.io/xorm", I need "xorm" Tags?
Or I have any mistake?

Is Anyone in same situation?

environment: - go ver16.4 - xorm verv1.1.0 - mysql ver8.0.22(MySQL Server Community Server) run this file. ``` go run tools/migrations/migration.go ``` tools/migrations/migration.go ``` package main import ( _ "github.com/go-sql-driver/mysql" "log" "time" "xorm.io/xorm" ) func GetDbInstance() (*xorm.Engine, error) { return xorm.NewEngine("mysql", "xxx:xxxxxx@tcp(172.17.0.1:3306)/xxx?charset=utf8mb4&parseTime=True") } type BaseModelLogicalDel struct { Id string `xorm:"varchar(46) pk"` CreatedAt time.Time `xorm:"created"` UpdatedAt time.Time `xorm:"updated"` DeletedAt *time.Time `xorm:"deleted"` } type TestPerson struct { BaseModelLogicalDel `xorm:"extends"` UserId string `xorm:"varchar(46) notnull"` PersonId string `xorm:"varchar(46) notnull"` Star bool SortNo int DispName string `xorm:"varchar(100)"` FirstName string LastName string FirstNameKana string LastNameKana string BirthYear *int BirthMonth *int BirthDay *int ImageId string `xorm:"varchar(46)"` ImageDefaultId string `xorm:"varchar(46)"` UserText string `xorm:"varchar(2000)"` GenderId *int At1 string `xorm:"varchar(10)"` At1Rate int At2 string `xorm:"varchar(10)"` At2Rate int At3 string `xorm:"varchar(10)"` At3Rate int At4 string `xorm:"varchar(10)"` At4Rate int At5 string `xorm:"varchar(10)"` At5Rate int At6 string `xorm:"varchar(10)"` At6Rate int } func ReCreateTable(db *xorm.Engine, model interface{}) error { if result, err := db.IsTableExist(model); err == nil && result { db.DropTables(model) } else { log.Println(result, err) } return db.CreateTables(model) } func main() { db, _ := GetDbInstance() db.ShowSQL(true) defer db.Close() ReCreateTable(db, TestPerson{}) } ``` log is below ``` [root@xxxxxx xxxxxx]# go run tools/migrations/migration.go [xorm] [info] 2021/05/24 19:40:55.026157 [SQL] SELECT `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? and `TABLE_NAME`=? [xxx test_person] - 2.137694ms [xorm] [info] 2021/05/24 19:40:55.026434 [SQL] BEGIN TRANSACTION [] - 163.408µs [xorm] [info] 2021/05/24 19:40:55.046072 [SQL] DROP TABLE IF EXISTS `test_person` [] - 19.609816ms [xorm] [info] 2021/05/24 19:40:55.046292 [SQL] COMMIT [] - 179.228µs [xorm] [info] 2021/05/24 19:40:55.046454 [SQL] BEGIN TRANSACTION [] - 137.387µs [xorm] [info] 2021/05/24 19:40:55.058688 [SQL] CREATE TABLE IF NOT EXISTS `test_person` ( `id` VARCHAR(46) PRIMARY KEY NOT NULL, `created_at` DATETIME NULL, `updated_at` DATETIME NULL, `deleted_at` DATETIME NULL, `user_id` VARCHAR(46) NOT NULL, `person_id` VARCHAR(46) NOT NULL, `disp_name` VARCHAR(100) NULL, `image_id` VARCHAR(46) NULL, `image_default_id` VARCHAR(46) NULL, `user_text` VARCHAR(2000) NULL, `at1` VARCHAR(10) NULL, `at2` VARCHAR(10) NULL, `at3` VARCHAR(10) NULL, `at4` VARCHAR(10) NULL, `at5` VARCHAR(10) NULL, `at6` VARCHAR(10) NULL ) DEFAULT CHARSET utf8mb4 [] - 12.076371ms [xorm] [info] 2021/05/24 19:40:55.058916 [SQL] COMMIT [] - 198.739µs ``` Some columns are ignored. these columns are no "xorm" tag. ``` Star bool SortNo int FirstName string LastName string FirstNameKana string LastNameKana string BirthYear *int BirthMonth *int BirthDay *int GenderId *int At1Rate int At2Rate int At3Rate int At4Rate int At5Rate int At6Rate int ``` created table columns(by MySQL WorkBench) ![image](/attachments/73295024-ea72-40e9-9a81-b044c5001bd3) When I use "github.com/go-xorm/xorm" instead of "xorm.io/xorm", created above columns. In "xorm.io/xorm", I need "xorm" Tags? Or I have any mistake? Is Anyone in same situation?
myuna changed title from Then create tables, Ignored some columns. to When create tables, Ignored some columns. 2021-05-24 19:46:44 +00:00
Author

I make other environment, I wasn't able to replicate that bug.

But, above environment, replicate it everytime.

There may be some occurrence condition...

I make other environment, I wasn't able to replicate that bug. But, above environment, replicate it everytime. There may be some occurrence condition...
lunny added the
need
test
label 2021-06-06 05:26:12 +00:00
lunny added
kind
bug
and removed
need
test
labels 2021-06-09 02:55:58 +00:00
lunny added this to the 1.1.1 milestone 2021-06-09 02:56:01 +00:00
Owner

The problem is when you use CreateTable(new(TestPerson)) it's OK. But when you use CreateTable(TestPerson{}), it will occur.

The problem is when you use `CreateTable(new(TestPerson))` it's OK. But when you use `CreateTable(TestPerson{})`, it will occur.
lunny closed this issue 2021-06-12 03:44:40 +00:00
lunny closed this issue 2021-06-12 03:44:40 +00:00
Sign in to join this conversation.
No Milestone
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: xorm/xorm#1911
No description provided.