DB: Table name fix (#145)

This commit is contained in:
Janos Dobronszki
2021-06-09 16:31:31 +01:00
committed by GitHub
parent 3da95bd85c
commit b0cbf847ac

View File

@@ -45,20 +45,23 @@ func (e *Db) Create(ctx context.Context, req *db.CreateRequest, rsp *db.CreateRe
if !ok { if !ok {
tenantId = "micro" tenantId = "micro"
} }
tenantId = strings.Replace(tenantId, "/", "_", -1) if req.Table == "" {
req.Table = "default"
}
tenantId = strings.Replace(strings.Replace(tenantId, "/", "_", -1), "-", "_", -1)
tableName := tenantId + "_" + req.Table tableName := tenantId + "_" + req.Table
if !re.Match([]byte(tableName)) { if !re.Match([]byte(tableName)) {
return errors.BadRequest("db.create", "table name is invalid") return errors.BadRequest("db.create", fmt.Sprintf("table name %v is invalid", req.Table))
} }
db, err := e.GetDBConn(ctx) db, err := e.GetDBConn(ctx)
if err != nil { if err != nil {
return err return err
} }
_, ok = c.Get(req.Table) _, ok = c.Get(tableName)
if !ok { if !ok {
db.Exec(fmt.Sprintf(stmt, tableName)) db.Exec(fmt.Sprintf(stmt, tableName))
c.Set(req.Table, true, 0) c.Set(tableName, true, 0)
} }
m := req.Record.AsMap() m := req.Record.AsMap()
@@ -89,7 +92,14 @@ func (e *Db) Update(ctx context.Context, req *db.UpdateRequest, rsp *db.UpdateRe
if !ok { if !ok {
tenantId = "micro" tenantId = "micro"
} }
tenantId = strings.Replace(tenantId, "/", "_", -1) if req.Table == "" {
req.Table = "default"
}
tenantId = strings.Replace(strings.Replace(tenantId, "/", "_", -1), "-", "_", -1)
tableName := tenantId + "_" + req.Table
if !re.Match([]byte(tableName)) {
return errors.BadRequest("db.create", fmt.Sprintf("table name %v is invalid", req.Table))
}
db, err := e.GetDBConn(ctx) db, err := e.GetDBConn(ctx)
if err != nil { if err != nil {
return err return err
@@ -105,7 +115,7 @@ func (e *Db) Update(ctx context.Context, req *db.UpdateRequest, rsp *db.UpdateRe
db.Transaction(func(tx *gorm.DB) error { db.Transaction(func(tx *gorm.DB) error {
rec := []Record{} rec := []Record{}
err = tx.Table(tenantId+"_"+req.Table).Where("ID = ?", id).Find(&rec).Error err = tx.Table(tableName).Where("ID = ?", id).Find(&rec).Error
if err != nil { if err != nil {
return err return err
} }
@@ -122,7 +132,7 @@ func (e *Db) Update(ctx context.Context, req *db.UpdateRequest, rsp *db.UpdateRe
} }
bs, _ := json.Marshal(m) bs, _ := json.Marshal(m)
return tx.Table(tenantId + "_" + req.Table).Save(Record{ return tx.Table(tableName).Save(Record{
ID: m[idKey].(string), ID: m[idKey].(string),
Data: bs, Data: bs,
}).Error }).Error
@@ -140,12 +150,20 @@ func (e *Db) Read(ctx context.Context, req *db.ReadRequest, rsp *db.ReadResponse
if !ok { if !ok {
tenantId = "micro" tenantId = "micro"
} }
tenantId = strings.Replace(tenantId, "/", "_", -1) if req.Table == "" {
req.Table = "default"
}
tenantId = strings.Replace(strings.Replace(tenantId, "/", "_", -1), "-", "_", -1)
tableName := tenantId + "_" + req.Table
if !re.Match([]byte(tableName)) {
return errors.BadRequest("db.create", fmt.Sprintf("table name %v is invalid", req.Table))
}
db, err := e.GetDBConn(ctx) db, err := e.GetDBConn(ctx)
if err != nil { if err != nil {
return err return err
} }
db = db.Table(tenantId + "_" + req.Table) db = db.Table(tableName)
for _, query := range queries { for _, query := range queries {
typ := "text" typ := "text"
switch query.Value.(type) { switch query.Value.(type) {
@@ -206,15 +224,21 @@ func (e *Db) Delete(ctx context.Context, req *db.DeleteRequest, rsp *db.DeleteRe
if !ok { if !ok {
tenantId = "micro" tenantId = "micro"
} }
if req.Table == "" {
tenantId = strings.Replace(tenantId, "/", "_", -1) req.Table = "default"
}
tenantId = strings.Replace(strings.Replace(tenantId, "/", "_", -1), "-", "_", -1)
tableName := tenantId + "_" + req.Table
if !re.Match([]byte(tableName)) {
return errors.BadRequest("db.create", fmt.Sprintf("table name %v is invalid", req.Table))
}
db, err := e.GetDBConn(ctx) db, err := e.GetDBConn(ctx)
if err != nil { if err != nil {
return err return err
} }
return db.Table(tenantId + "_" + req.Table).Delete(Record{ return db.Table(tableName).Delete(Record{
ID: req.Id, ID: req.Id,
}).Error }).Error
} }