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 {
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", "table name is invalid")
return errors.BadRequest("db.create", fmt.Sprintf("table name %v is invalid", req.Table))
}
db, err := e.GetDBConn(ctx)
if err != nil {
return err
}
_, ok = c.Get(req.Table)
_, ok = c.Get(tableName)
if !ok {
db.Exec(fmt.Sprintf(stmt, tableName))
c.Set(req.Table, true, 0)
c.Set(tableName, true, 0)
}
m := req.Record.AsMap()
@@ -89,7 +92,14 @@ func (e *Db) Update(ctx context.Context, req *db.UpdateRequest, rsp *db.UpdateRe
if !ok {
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)
if err != nil {
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 {
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 {
return err
}
@@ -122,7 +132,7 @@ func (e *Db) Update(ctx context.Context, req *db.UpdateRequest, rsp *db.UpdateRe
}
bs, _ := json.Marshal(m)
return tx.Table(tenantId + "_" + req.Table).Save(Record{
return tx.Table(tableName).Save(Record{
ID: m[idKey].(string),
Data: bs,
}).Error
@@ -140,12 +150,20 @@ func (e *Db) Read(ctx context.Context, req *db.ReadRequest, rsp *db.ReadResponse
if !ok {
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)
if err != nil {
return err
}
db = db.Table(tenantId + "_" + req.Table)
db = db.Table(tableName)
for _, query := range queries {
typ := "text"
switch query.Value.(type) {
@@ -206,15 +224,21 @@ func (e *Db) Delete(ctx context.Context, req *db.DeleteRequest, rsp *db.DeleteRe
if !ok {
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)
if err != nil {
return err
}
return db.Table(tenantId + "_" + req.Table).Delete(Record{
return db.Table(tableName).Delete(Record{
ID: req.Id,
}).Error
}