3
3
import com .alibaba .druid .sql .parser .Token ;
4
4
5
5
import java .util .HashMap ;
6
+ import java .util .List ;
6
7
import java .util .Map ;
7
8
import java .util .stream .Collectors ;
9
+ import java .util .stream .IntStream ;
10
+ import java .util .stream .Stream ;
8
11
9
12
/**
10
13
* Created by Administrator on 2017/2/13 0013.
@@ -14,21 +17,19 @@ public class MatchMethodGenerator {
14
17
static Map <String , Token > map = new HashMap <String , Token >();
15
18
16
19
static {
20
+
17
21
map .put ("ALL" , Token .ALL );
18
22
map .put ("ALTER" , Token .ALTER );
19
23
map .put ("AND" , Token .AND );
20
24
map .put ("ANY" , Token .ANY );
21
25
map .put ("AS" , Token .AS );
22
-
23
26
map .put ("ENABLE" , Token .ENABLE );
24
27
map .put ("DISABLE" , Token .DISABLE );
25
-
26
28
map .put ("ASC" , Token .ASC );
27
29
map .put ("BETWEEN" , Token .BETWEEN );
28
30
map .put ("BY" , Token .BY );
29
31
map .put ("CASE" , Token .CASE );
30
32
map .put ("CAST" , Token .CAST );
31
-
32
33
map .put ("CHECK" , Token .CHECK );
33
34
map .put ("CONSTRAINT" , Token .CONSTRAINT );
34
35
map .put ("CREATE" , Token .CREATE );
@@ -38,62 +39,52 @@ public class MatchMethodGenerator {
38
39
map .put ("TABLESPACE" , Token .TABLESPACE );
39
40
map .put ("PROCEDURE" , Token .PROCEDURE );
40
41
map .put ("FUNCTION" , Token .FUNCTION );
41
-
42
42
map .put ("DELETE" , Token .DELETE );
43
43
map .put ("DESC" , Token .DESC );
44
44
map .put ("DISTINCT" , Token .DISTINCT );
45
45
map .put ("DROP" , Token .DROP );
46
46
map .put ("ELSE" , Token .ELSE );
47
47
map .put ("EXPLAIN" , Token .EXPLAIN );
48
48
map .put ("EXCEPT" , Token .EXCEPT );
49
-
50
49
map .put ("END" , Token .END );
51
50
map .put ("ESCAPE" , Token .ESCAPE );
52
51
map .put ("EXISTS" , Token .EXISTS );
53
52
map .put ("FOR" , Token .FOR );
54
53
map .put ("FOREIGN" , Token .FOREIGN );
55
-
56
54
map .put ("FROM" , Token .FROM );
57
55
map .put ("FULL" , Token .FULL );
58
56
map .put ("GROUP" , Token .GROUP );
59
57
map .put ("HAVING" , Token .HAVING );
60
58
map .put ("IN" , Token .IN );
61
-
62
59
map .put ("INDEX" , Token .INDEX );
63
60
map .put ("INNER" , Token .INNER );
64
61
map .put ("INSERT" , Token .INSERT );
65
62
map .put ("INTERSECT" , Token .INTERSECT );
66
63
map .put ("INTERVAL" , Token .INTERVAL );
67
-
68
64
map .put ("INTO" , Token .INTO );
69
65
map .put ("IS" , Token .IS );
70
66
map .put ("JOIN" , Token .JOIN );
71
67
map .put ("KEY" , Token .KEY );
72
68
map .put ("LEFT" , Token .LEFT );
73
-
74
69
map .put ("LIKE" , Token .LIKE );
75
70
map .put ("LOCK" , Token .LOCK );
76
71
map .put ("MINUS" , Token .MINUS );
77
72
map .put ("NOT" , Token .NOT );
78
-
79
73
map .put ("NULL" , Token .NULL );
80
74
map .put ("ON" , Token .ON );
81
75
map .put ("OR" , Token .OR );
82
76
map .put ("ORDER" , Token .ORDER );
83
77
map .put ("OUTER" , Token .OUTER );
84
-
85
78
map .put ("PRIMARY" , Token .PRIMARY );
86
79
map .put ("REFERENCES" , Token .REFERENCES );
87
80
map .put ("RIGHT" , Token .RIGHT );
88
81
map .put ("SCHEMA" , Token .SCHEMA );
89
82
map .put ("SELECT" , Token .SELECT );
90
-
91
83
map .put ("SET" , Token .SET );
92
84
map .put ("SOME" , Token .SOME );
93
85
map .put ("TABLE" , Token .TABLE );
94
86
map .put ("THEN" , Token .THEN );
95
87
map .put ("TRUNCATE" , Token .TRUNCATE );
96
-
97
88
map .put ("UNION" , Token .UNION );
98
89
map .put ("UNIQUE" , Token .UNIQUE );
99
90
map .put ("UPDATE" , Token .UPDATE );
@@ -102,23 +93,18 @@ public class MatchMethodGenerator {
102
93
map .put ("SEQUENCE" , Token .SEQUENCE );
103
94
map .put ("TRIGGER" , Token .TRIGGER );
104
95
map .put ("USER" , Token .USER );
105
-
106
96
map .put ("WHEN" , Token .WHEN );
107
97
map .put ("WHERE" , Token .WHERE );
108
98
map .put ("XOR" , Token .XOR );
109
-
110
99
map .put ("OVER" , Token .OVER );
111
100
map .put ("TO" , Token .TO );
112
101
map .put ("USE" , Token .USE );
113
-
114
102
map .put ("REPLACE" , Token .REPLACE );
115
-
116
103
map .put ("COMMENT" , Token .COMMENT );
117
104
map .put ("COMPUTE" , Token .COMPUTE );
118
105
map .put ("WITH" , Token .WITH );
119
106
map .put ("GRANT" , Token .GRANT );
120
107
map .put ("REVOKE" , Token .REVOKE );
121
-
122
108
// MySql procedure: add by zz
123
109
map .put ("WHILE" , Token .WHILE );
124
110
map .put ("DO" , Token .DO );
@@ -137,9 +123,57 @@ public class MatchMethodGenerator {
137
123
}
138
124
139
125
public static void main (String [] args ) {
140
- isXXXTokenGenerator ();
141
- skipXXXTokenGenerator ();
126
+ //isXXXTokenGenerator();
127
+ //skipXXXTokenGenerator();
128
+ IntStream .range (24 , 31 ).forEach (x -> {
129
+ Map <Long , List <Token >> map = Stream .of (Token .values ())
130
+ .filter ((t ) -> t .name () != null )
131
+ .collect (Collectors .groupingBy ((t ) -> {
132
+ String name = t .name ();
133
+ char size = (char )name .length ();
134
+ int b = 378551 ;
135
+ int a = 63689 ;
136
+ int seed = 13131 ;
137
+ long hash = 0 ;
138
+ int low = 0 ;
139
+ int high = 0 ;
140
+ for (int i =0 ; i <size ; i ++) {
141
+ char c = name .charAt (i );
142
+ //BKDRHash
143
+ low = low * seed + c ;
144
+ //RS Hash
145
+ high = high * a + c ;
146
+ a *= b ;
147
+ };
148
+ hash = (long )(high & 0x7FFFFFFF ) << 32 | (long )(low & 0x7FFFFFFF );
149
+ return (hash & (0xff << x ));
150
+ // return t.name().chars().sum();
151
+ }
152
+ ));
153
+ /*long count = map.entrySet().stream()
154
+ .filter((k) -> k.getValue().size() > 2)
155
+ .count();
156
+ if (count == 0) {
157
+ System.out.println("result = "+x);
158
+ }
159
+ */
160
+ System .out .println ("result = " +x +" >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" );
161
+ map .entrySet ().stream ()
162
+ //.filter((k) -> k.getValue().size() > 1)
163
+ .forEach ((e ) -> System .out .format ("%d : %s %n" , e .getKey (), e .getValue ().toString ()));
142
164
165
+
166
+ });
167
+ //当左移位数为
168
+ // result = 24
169
+ // result = 25
170
+ // result = 26
171
+ // result = 27
172
+ // result = 28
173
+ // result = 29
174
+ // result = 30
175
+ // result = 31
176
+ //.forEach((e) -> System.out.format("%d : %s %n", e.getKey(), e.getValue().toString()));
143
177
}
144
178
145
179
/**
0 commit comments