func NeedCreatePatternInExprDecorator(p *TableAliasStmtInfo, n *ast.PatternInExpr) (router.Rule, bool, bool, error) {
	if n.Sel != nil {
		return nil, false, false, fmt.Errorf("TableName does not support Sel in sharding")
	}
	columnNameExpr, ok := n.Expr.(*ast.ColumnNameExpr)
	if !ok {
		return nil, false, false, nil
	}
	rule, need, isAlias, err := NeedCreateColumnNameExprDecoratorInCondition(p, columnNameExpr)
	if err != nil {
		return nil, false, false, fmt.Errorf("check ColumnName error: %v", err)
	}
	if !need && rule == nil {
		return nil, false, false, nil
	}
	if rule.GetType() == router.GlobalTableRuleType {
		return rule, true, isAlias, nil
	}
	return rule, need, isAlias, nil
}
NeedCreatePatternInExprDecorator check if PatternInExpr needs decoration
package plan
import (
	"fmt"
	"io"
	"sort"
	"github.com/nooncall/shazam/parser/ast"
	"github.com/nooncall/shazam/parser/format"
	driver "github.com/nooncall/shazam/parser/tidb-types/parser_driver"
	"github.com/nooncall/shazam/parser/types"
	"github.com/nooncall/shazam/proxy/router"
	"github.com/nooncall/shazam/util"
)
var _ ast.ExprNode = &PatternInExprDecorator{}
type PatternInExprDecorator struct {
	Expr ast.ExprNode
	List []ast.ExprNode
	Not  bool
	tableIndexes  []int
	indexValueMap map[int][]ast.ExprNode  
	rule   router.Rule
	result *RouteResult
}