code: func init() {
  	ast.NewValueExpr = newValueExpr
  	ast.NewParamMarkerExpr = newParamMarkerExpr
  	ast.NewDecimal = func(str string) (interface{}, error) {
  		dec := new(types.MyDecimal)
  		err := dec.FromString(hack.Slice(str))
  		return dec, err
  	}
  	ast.NewHexLiteral = func(str string) (interface{}, error) {
  		h, err := types.NewHexLiteral(str)
  		return h, err
  	}
  	ast.NewBitLiteral = func(str string) (interface{}, error) {
  		b, err := types.NewBitLiteral(str)
  		return b, err
  	}
  }
docs: // The purpose of driver package is to decompose the dependency of the parser and
  // types package.
  // It provides the NewValueExpr function for the ast package, so the ast package
  // do not depends on the concrete definition of `types.Datum`, thus get rid of
  // the dependency of the types package.
  // The parser package depends on the ast package, but not the types package.
  // The whole relationship:
  // ast imports []
  // tidb/types imports [parser/types]
  // parser imports [ast, parser/types]
  // driver imports [ast, tidb/types]
  // tidb imports [parser, driver]