diff --git a/web/rpc.go b/web/rpc.go index 50f7f931..27afa667 100644 --- a/web/rpc.go +++ b/web/rpc.go @@ -26,48 +26,73 @@ func (r *rpc) Sql(c *fibre.Context, sql string, vars map[string]interface{}) (in return db.Execute(c, sql, vars) } -func (r *rpc) List(c *fibre.Context, class string) (interface{}, error) { - return db.Execute(c, "SELECT * FROM $class", map[string]interface{}{ - "class": sql.NewTable(class), - }) -} - -func (r *rpc) Create(c *fibre.Context, class string, data map[string]interface{}) (interface{}, error) { - return db.Execute(c, "CREATE $class CONTENT $data RETURN AFTER", map[string]interface{}{ - "class": sql.NewTable(class), - "data": data, - }) -} - func (r *rpc) Select(c *fibre.Context, class string, thing interface{}) (interface{}, error) { - return db.Execute(c, "SELECT * FROM $thing", map[string]interface{}{ - "thing": sql.NewThing(class, thing), - }) + switch thing.(type) { + case *fibre.RPCNull: + return db.Execute(c, "SELECT * FROM $class", map[string]interface{}{ + "class": sql.NewTable(class), + }) + default: + return db.Execute(c, "SELECT * FROM $thing", map[string]interface{}{ + "thing": sql.NewThing(class, thing), + }) + } } -func (r *rpc) Insert(c *fibre.Context, class string, thing interface{}, data map[string]interface{}) (interface{}, error) { - return db.Execute(c, "INSERT $thing CONTENT $data RETURN AFTER", map[string]interface{}{ - "thing": sql.NewThing(class, thing), - "data": data, - }) +func (r *rpc) Create(c *fibre.Context, class string, thing interface{}, data map[string]interface{}) (interface{}, error) { + switch thing.(type) { + case *fibre.RPCNull: + return db.Execute(c, "CREATE $class CONTENT $data RETURN AFTER", map[string]interface{}{ + "class": sql.NewTable(class), + "data": data, + }) + default: + return db.Execute(c, "CREATE $thing CONTENT $data RETURN AFTER", map[string]interface{}{ + "thing": sql.NewThing(class, thing), + "data": data, + }) + } } -func (r *rpc) Upsert(c *fibre.Context, class string, thing interface{}, data map[string]interface{}) (interface{}, error) { - return db.Execute(c, "UPSERT $thing CONTENT $data RETURN AFTER", map[string]interface{}{ - "thing": sql.NewThing(class, thing), - "data": data, - }) +func (r *rpc) Update(c *fibre.Context, class string, thing interface{}, data map[string]interface{}) (interface{}, error) { + switch thing.(type) { + case *fibre.RPCNull: + return db.Execute(c, "UPDATE $class CONTENT $data RETURN AFTER", map[string]interface{}{ + "class": sql.NewTable(class), + "data": data, + }) + default: + return db.Execute(c, "UPDATE $thing CONTENT $data RETURN AFTER", map[string]interface{}{ + "thing": sql.NewThing(class, thing), + "data": data, + }) + } } func (r *rpc) Modify(c *fibre.Context, class string, thing interface{}, data map[string]interface{}) (interface{}, error) { - return db.Execute(c, "MODIFY $thing DIFF $data RETURN DIFF", map[string]interface{}{ - "thing": sql.NewThing(class, thing), - "data": data, - }) + switch thing.(type) { + case *fibre.RPCNull: + return db.Execute(c, "UPDATE $class DIFF $data RETURN AFTER", map[string]interface{}{ + "class": sql.NewTable(class), + "data": data, + }) + default: + return db.Execute(c, "UPDATE $thing DIFF $data RETURN AFTER", map[string]interface{}{ + "thing": sql.NewThing(class, thing), + "data": data, + }) + } } func (r *rpc) Delete(c *fibre.Context, class string, thing interface{}) (interface{}, error) { - return db.Execute(c, "DELETE $thing", map[string]interface{}{ - "thing": sql.NewThing(class, thing), - }) + switch thing.(type) { + case *fibre.RPCNull: + return db.Execute(c, "DELETE $class", map[string]interface{}{ + "class": sql.NewTable(class), + }) + default: + return db.Execute(c, "DELETE $thing", map[string]interface{}{ + "thing": sql.NewThing(class, thing), + }) + } }