update for classes

This commit is contained in:
shoopea 2020-02-17 18:05:30 +08:00
parent 09df809969
commit 00ac535827
2 changed files with 82 additions and 0 deletions

10
obj.go
View File

@ -19,6 +19,8 @@ var (
cacheObjType map[string]int64 cacheObjType map[string]int64
cacheObjSubType map[string]int64 cacheObjSubType map[string]int64
cacheObjClassif map[string]ObjClassif
cacheObjClass map[string]ObjClass
cacheObjJob map[int64]Job cacheObjJob map[int64]Job
muxObjJob sync.Mutex muxObjJob sync.Mutex
) )
@ -34,6 +36,14 @@ func initCache(initDB bool) {
err = loadObjSubType() err = loadObjSubType()
logOnError(err, "initCache : caching obj_sub_type") logOnError(err, "initCache : caching obj_sub_type")
log.Println("Caching obj_classif ..")
err = loadObjClassif()
logOnError(err, "initCache : caching obj_classif")
log.Println("Caching obj_class ..")
err = loadObjClass()
logOnError(err, "initCache : caching obj_class")
log.Println("Caching guilds ..") log.Println("Caching guilds ..")
err = loadObjGuild() err = loadObjGuild()
logOnError(err, "initCache : caching guilds") logOnError(err, "initCache : caching guilds")

72
sql.go
View File

@ -71,6 +71,30 @@ func initDB() {
failOnError(err, "initDB : create table code_obj_sub_type") failOnError(err, "initDB : create table code_obj_sub_type")
log.Println("initDB : code_obj_sub_type created ...") log.Println("initDB : code_obj_sub_type created ...")
_, err = db.Exec(`CREATE TABLE code_obj_classif (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT
,intl_id VARCHAR(32) NOT NULL
,name VARCHAR(80) NOT NULL
,obj_type_id SMALLINT UNSIGNED NOT NULL
,PRIMARY KEY (id)
,UNIQUE KEY (intl_id)
,FOREIGN KEY (obj_type_id) REFERENCES code_obj_type(id) ON DELETE CASCADE
) ENGINE = InnoDB CHARSET=utf8mb4 COLLATE utf8mb4_bin;`)
failOnError(err, "initDB : create table code_obj_type")
log.Println("initDB : code_obj_classif created ...")
_, err = db.Exec(`CREATE TABLE code_obj_class (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT
,intl_id VARCHAR(32) NOT NULL
,name VARCHAR(80) NOT NULL
,obj_classif_id SMALLINT UNSIGNED NOT NULL
,PRIMARY KEY (id)
,UNIQUE KEY (intl_id)
,FOREIGN KEY (obj_classif_id) REFERENCES code_obj_classif(id) ON DELETE CASCADE
) ENGINE = InnoDB CHARSET=utf8mb4 COLLATE utf8mb4_bin;`)
failOnError(err, "initDB : create table code_obj_class")
log.Println("initDB : code_obj_class created ...")
_, err = db.Exec(`CREATE TABLE obj ( _, err = db.Exec(`CREATE TABLE obj (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT
,obj_type_id SMALLINT UNSIGNED NOT NULL ,obj_type_id SMALLINT UNSIGNED NOT NULL
@ -83,6 +107,18 @@ func initDB() {
failOnError(err, "initDB : create table obj") failOnError(err, "initDB : create table obj")
log.Println("initDB : obj created ...") log.Println("initDB : obj created ...")
_, err = db.Exec(`CREATE TABLE obj_class (
obj_id BIGINT UNSIGNED NOT NULL
,obj_classif_id SMALLINT UNSIGNED NOT NULL
,obj_class_id SMALLINT UNSIGNED NOT NULL
,FOREIGN KEY (obj_id) REFERENCES obj(id) ON DELETE CASCADE
,FOREIGN KEY (obj_classif_id) REFERENCES code_obj_classif(id) ON DELETE CASCADE
,FOREIGN KEY (obj_class_id) REFERENCES code_obj_class(id) ON DELETE CASCADE
,UNIQUE KEY (obj_id, obj_classif_id)
) ENGINE = InnoDB CHARSET=utf8mb4 COLLATE utf8mb4_bin;`)
failOnError(err, "initDB : create table obj_class")
log.Println("initDB : obj_class created ...")
_, err = db.Exec(`CREATE TABLE obj_item ( _, err = db.Exec(`CREATE TABLE obj_item (
obj_id BIGINT UNSIGNED NOT NULL obj_id BIGINT UNSIGNED NOT NULL
,intl_id VARCHAR(32) ,intl_id VARCHAR(32)
@ -634,6 +670,42 @@ func insertObjSubType(intlId string, name string, objType string) error {
return nil return nil
} }
func insertObjClassif(intlId string, name string, objType string) error {
stmt, err := db.Prepare(`INSERT INTO code_obj_classif
SELECT null id, ? intl_id, ? name, cot.id obj_type_id
FROM code_obj_type cot
WHERE cot.intl_id = ?;`)
if err != nil {
return err
}
defer stmt.Close()
_, err = stmt.Exec(intlId, name, objType)
if err != nil {
return err
}
return nil
}
func insertObjClass(intlId string, name string, objClassif string) error {
stmt, err := db.Prepare(`INSERT INTO code_obj_class
SELECT null id, ? intl_id, ? name, coc.id obj_classif_id
FROM code_obj_classif coc
WHERE coc.intl_id = ?;`)
if err != nil {
return err
}
defer stmt.Close()
_, err = stmt.Exec(intlId, name, objClassif)
if err != nil {
return err
}
return nil
}
func insertMsgItem(objId int64, itemId int64, quantity int64) error { func insertMsgItem(objId int64, itemId int64, quantity int64) error {
stmt, err := db.Prepare(`INSERT INTO obj_msg_item (obj_id, item_id, quantity) stmt, err := db.Prepare(`INSERT INTO obj_msg_item (obj_id, item_id, quantity)
VALUES (?, ?, ?);`) VALUES (?, ?, ?);`)