```diff
// Filter is an interface to filter SQL
type Filter interface {
--- Do(sql string) string
+++ Do(ctx context.Context, sql string) string
}
```
### Adds a `Context` parameter to the `Do` method of the Filter interface.
Developers can rewrite SQL through the `Filter` `Do` method and **need to get the necessary data from the Context** to assist.
For example, get user information through `Context`, so that different users can use different tables. Another example is to get the flags through `Context` to add annotations to the SQL, and use the annotations to let the subsequent `DB-Proxy` to achieve read/write separation.
Reviewed-on: https://gitea.com/xorm/xorm/pulls/2270
Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: LinkinStars <linkinstar@foxmail.com>
Co-committed-by: LinkinStars <linkinstar@foxmail.com>
# Issue
Such a following query is executed in master DB node with EngineGroup.
```go
s := engineGroup.NewSession(); // create session from EngineGroup.
sql := `
SELECT * FROM USER;
`;
type User struct { ... };
var users []User;
err := s.Sql(sql).Find(&users); // executed to master DB node.
```
Reviewed-on: https://gitea.com/xorm/xorm/pulls/2066
Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: rennnosuke <rennnosuke@noreply.gitea.io>
Co-committed-by: rennnosuke <rennnosuke@noreply.gitea.io>
* add support group engine
* revert code
* add NewGroup function
* add engine group policy
* rename file name
* modify policy interface
* remove Init function from policy interface
* refactor Group Policy
* rename and comments
* rename and bug fix for WeightRoundRobinPolicy
* modify Slave function
* modify Slave function and add LeastConnPolicy
* use original Engine and Session
* remove unused count variables
* fix bug on NewEngineGroup
* remove unused method
* improve range and refactor
* add some comments and refactor
* implement GroupPolicy of GroupPolicyHandler
* refactor
* simple code
* add tests support for EngineGroup & fix some bugs
* improve the NewEngineGroup interface
* change the default policy of engine group
* fix some tests