Skip to content

Commit 04ec6c5

Browse files
committed
找到了sql关键字8位索引,BKDRHash 24~31
1 parent 46d0083 commit 04ec6c5

File tree

1 file changed

+54
-20
lines changed

1 file changed

+54
-20
lines changed

src/main/java/io/mycat/MatchMethodGenerator.java

Lines changed: 54 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@
33
import com.alibaba.druid.sql.parser.Token;
44

55
import java.util.HashMap;
6+
import java.util.List;
67
import java.util.Map;
78
import java.util.stream.Collectors;
9+
import java.util.stream.IntStream;
10+
import java.util.stream.Stream;
811

912
/**
1013
* Created by Administrator on 2017/2/13 0013.
@@ -14,21 +17,19 @@ public class MatchMethodGenerator {
1417
static Map<String, Token> map = new HashMap<String, Token>();
1518

1619
static {
20+
1721
map.put("ALL", Token.ALL);
1822
map.put("ALTER", Token.ALTER);
1923
map.put("AND", Token.AND);
2024
map.put("ANY", Token.ANY);
2125
map.put("AS", Token.AS);
22-
2326
map.put("ENABLE", Token.ENABLE);
2427
map.put("DISABLE", Token.DISABLE);
25-
2628
map.put("ASC", Token.ASC);
2729
map.put("BETWEEN", Token.BETWEEN);
2830
map.put("BY", Token.BY);
2931
map.put("CASE", Token.CASE);
3032
map.put("CAST", Token.CAST);
31-
3233
map.put("CHECK", Token.CHECK);
3334
map.put("CONSTRAINT", Token.CONSTRAINT);
3435
map.put("CREATE", Token.CREATE);
@@ -38,62 +39,52 @@ public class MatchMethodGenerator {
3839
map.put("TABLESPACE", Token.TABLESPACE);
3940
map.put("PROCEDURE", Token.PROCEDURE);
4041
map.put("FUNCTION", Token.FUNCTION);
41-
4242
map.put("DELETE", Token.DELETE);
4343
map.put("DESC", Token.DESC);
4444
map.put("DISTINCT", Token.DISTINCT);
4545
map.put("DROP", Token.DROP);
4646
map.put("ELSE", Token.ELSE);
4747
map.put("EXPLAIN", Token.EXPLAIN);
4848
map.put("EXCEPT", Token.EXCEPT);
49-
5049
map.put("END", Token.END);
5150
map.put("ESCAPE", Token.ESCAPE);
5251
map.put("EXISTS", Token.EXISTS);
5352
map.put("FOR", Token.FOR);
5453
map.put("FOREIGN", Token.FOREIGN);
55-
5654
map.put("FROM", Token.FROM);
5755
map.put("FULL", Token.FULL);
5856
map.put("GROUP", Token.GROUP);
5957
map.put("HAVING", Token.HAVING);
6058
map.put("IN", Token.IN);
61-
6259
map.put("INDEX", Token.INDEX);
6360
map.put("INNER", Token.INNER);
6461
map.put("INSERT", Token.INSERT);
6562
map.put("INTERSECT", Token.INTERSECT);
6663
map.put("INTERVAL", Token.INTERVAL);
67-
6864
map.put("INTO", Token.INTO);
6965
map.put("IS", Token.IS);
7066
map.put("JOIN", Token.JOIN);
7167
map.put("KEY", Token.KEY);
7268
map.put("LEFT", Token.LEFT);
73-
7469
map.put("LIKE", Token.LIKE);
7570
map.put("LOCK", Token.LOCK);
7671
map.put("MINUS", Token.MINUS);
7772
map.put("NOT", Token.NOT);
78-
7973
map.put("NULL", Token.NULL);
8074
map.put("ON", Token.ON);
8175
map.put("OR", Token.OR);
8276
map.put("ORDER", Token.ORDER);
8377
map.put("OUTER", Token.OUTER);
84-
8578
map.put("PRIMARY", Token.PRIMARY);
8679
map.put("REFERENCES", Token.REFERENCES);
8780
map.put("RIGHT", Token.RIGHT);
8881
map.put("SCHEMA", Token.SCHEMA);
8982
map.put("SELECT", Token.SELECT);
90-
9183
map.put("SET", Token.SET);
9284
map.put("SOME", Token.SOME);
9385
map.put("TABLE", Token.TABLE);
9486
map.put("THEN", Token.THEN);
9587
map.put("TRUNCATE", Token.TRUNCATE);
96-
9788
map.put("UNION", Token.UNION);
9889
map.put("UNIQUE", Token.UNIQUE);
9990
map.put("UPDATE", Token.UPDATE);
@@ -102,23 +93,18 @@ public class MatchMethodGenerator {
10293
map.put("SEQUENCE", Token.SEQUENCE);
10394
map.put("TRIGGER", Token.TRIGGER);
10495
map.put("USER", Token.USER);
105-
10696
map.put("WHEN", Token.WHEN);
10797
map.put("WHERE", Token.WHERE);
10898
map.put("XOR", Token.XOR);
109-
11099
map.put("OVER", Token.OVER);
111100
map.put("TO", Token.TO);
112101
map.put("USE", Token.USE);
113-
114102
map.put("REPLACE", Token.REPLACE);
115-
116103
map.put("COMMENT", Token.COMMENT);
117104
map.put("COMPUTE", Token.COMPUTE);
118105
map.put("WITH", Token.WITH);
119106
map.put("GRANT", Token.GRANT);
120107
map.put("REVOKE", Token.REVOKE);
121-
122108
// MySql procedure: add by zz
123109
map.put("WHILE", Token.WHILE);
124110
map.put("DO", Token.DO);
@@ -137,9 +123,57 @@ public class MatchMethodGenerator {
137123
}
138124

139125
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()));
142164

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()));
143177
}
144178

145179
/**

0 commit comments

Comments
 (0)