Skip to content

Commit 074f5d8

Browse files
committed
first parse基本完善,还需要添加注解以及transaction相关语句处理流程
1 parent bc3b7ac commit 074f5d8

File tree

8 files changed

+591
-200
lines changed

8 files changed

+591
-200
lines changed

minimal_sql_tokens.txt

Lines changed: 55 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,66 @@
1-
FROM
2-
JOIN
3-
UPDATE
1+
AS
2+
IF
3+
ON
4+
FOR
5+
NOT
6+
SQL
47
USE
5-
DELETE
8+
CALL
69
DROP
7-
SELECT
8-
SHOW
9-
INSERT
10+
DESC
11+
FROM
1012
INTO
13+
JOIN
1114
LOCK
12-
LIMIT
15+
LEFT
16+
SHOW
1317
ALTER
18+
GROUP
19+
GRANT
20+
LIMIT
21+
MYCAT
22+
ORDER
23+
RIGHT
24+
TABLE
25+
UNION
26+
WHERE
27+
CATLET
1428
CREATE
29+
EXISTS
30+
UPDATE
31+
DELETE
32+
SELECT
33+
INSERT
34+
IGNORE
35+
SCHEMA
36+
RENAME
37+
REVOKE
38+
DB_TYPE
39+
EXPLAIN
40+
BALANCE
1541
REPLACE
16-
TABLE
17-
TRUNCATE
1842
DELAYED
43+
DATANODE
44+
DESCRIBE
45+
TRUNCATE
46+
PROCEDURE
1947
LOW_PRIORITY
2048
HIGH_PRIORITY
21-
IGNORE
22-
AS
23-
IF
24-
NOT
25-
EXISTS
26-
BALANCE
27-
SQL
28-
MYCAT
29-
DB_TYPE
30-
SCHEMA
31-
DATANODE
32-
CATLET
49+
50+
51+
52+
53+
54+
55+
56+
57+
58+
59+
60+
61+
62+
63+
64+
65+
3366

Lines changed: 52 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,58 @@
11
package io.mycat;
22

33
/**
4-
* Created by Fanfan on 2017/3/4.
4+
* Created by Kaiz on 2017/3/4.
55
*/
66
public class IntTokenHash {
7-
public static final int FROM = 0x992e0004;
8-
public static final int JOIN = 0xf9700004;
9-
public static final int UPDATE = 0x62840006;
10-
public static final int USE = 0xf840003;
11-
public static final int DELETE = 0x33e50006;
12-
public static final int DROP = 0xba5d0004;
13-
public static final int SELECT = 0x2a10006;
14-
public static final int SHOW = 0xb0300004;
15-
public static final int INSERT = 0xa3b10006;
16-
public static final int INTO = 0xb2e70004;
17-
public static final int LOCK = 0xed330004;
18-
public static final int LIMIT = 0x450a0005;
19-
public static final int ALTER = 0xb2db0005;
20-
public static final int CREATE = 0xdde00006;
21-
public static final int REPLACE = 0xa88c0007;
22-
public static final int TABLE = 0x3780005;
23-
public static final int TRUNCATE = 0xcb5d0008;
24-
public static final int DELAYED = 0x56380007;
25-
public static final int LOW_PRIORITY = 0xb805000c;
26-
public static final int HIGH_PRIORITY = 0x7c6f000d;
27-
public static final int IGNORE = 0x6c360006;
28-
public static final int AS = 0x46580002;
29-
public static final int IF = 0x47650002;
30-
public static final int NOT = 0x68b00003;
31-
public static final int EXISTS = 0x2ed70006;
32-
public static final int BALANCE = 0x8d070007;
33-
public static final int SQL = 0x53820003;
34-
public static final int MYCAT = 0xdce50005;
35-
public static final int DB_TYPE = 0xac610007;
36-
public static final int SCHEMA = 0xc490006;
37-
public static final int DATANODE = 0x45d0008;
38-
public static final int CATLET = 0xda600006;
7+
public static final int AS = 0x46580002;
8+
public static final int IF = 0x47650002;
9+
public static final int ON = 0x409e0002;
10+
11+
public static final int FOR = 0x576e0003;
12+
public static final int NOT = 0x68b00003;
13+
public static final int SQL = 0x53820003;
14+
public static final int USE = 0x0f840003;
15+
16+
public static final int DROP = 0xba5d0004;
17+
public static final int FROM = 0x992e0004;
18+
public static final int INTO = 0xb2e70004;
19+
public static final int JOIN = 0xf9700004;
20+
public static final int LOCK = 0xed330004;
21+
public static final int LEFT = 0xf4e50004;
22+
public static final int SHOW = 0xb0300004;
23+
24+
public static final int ALTER = 0xb2db0005;
25+
public static final int GROUP = 0x43f50005;
26+
public static final int LIMIT = 0x450a0005;
27+
public static final int MYCAT = 0xdce50005;
28+
public static final int ORDER = 0x88da0005;
29+
public static final int RIGHT = 0xec610005;
30+
public static final int TABLE = 0x03780005;
31+
public static final int UNION = 0xcf9d0005;
32+
public static final int WHERE = 0x75950005;
33+
34+
public static final int CATLET = 0xda600006;
35+
public static final int CREATE = 0xdde00006;
36+
public static final int EXISTS = 0x2ed70006;
37+
public static final int UPDATE = 0x62840006;
38+
public static final int DELETE = 0x33e50006;
39+
public static final int SELECT = 0x02a10006;
40+
public static final int INSERT = 0xa3b10006;
41+
public static final int IGNORE = 0x6c360006;
42+
public static final int SCHEMA = 0x0c490006;
43+
44+
public static final int DB_TYPE = 0xac610007;
45+
public static final int BALANCE = 0x8d070007;
46+
public static final int REPLACE = 0xa88c0007;
47+
public static final int DELAYED = 0x56380007;
48+
49+
public static final int DATANODE = 0x045d0008;
50+
public static final int TRUNCATE = 0xcb5d0008;
51+
52+
public static final int PROCEDURE = 0x11600009;
53+
54+
public static final int LOW_PRIORITY = 0xb805000c;
55+
56+
public static final int HIGH_PRIORITY = 0x7c6f000d;
57+
3958
}

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

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.nio.file.Files;
99
import java.nio.file.Paths;
1010
import java.util.*;
11+
import java.util.function.Function;
1112
import java.util.stream.Collectors;
1213
import java.util.stream.IntStream;
1314
import java.util.stream.Stream;
@@ -133,25 +134,28 @@ static void initShrinkCharTbl () {
133134
shrinkCharTbl['_'-'$'] = (byte)38;
134135
}
135136

136-
static void sqlKeyHastTest() {
137+
static void sqlKeyHastTest(String fileName, Function<String, Long> fun, long maskBit) {
137138
initShrinkCharTbl();
138139

139140
IntStream.range(0, 54).forEach(x -> {
140141
// Map<Long, List<Token>> map = Stream.of(Token.values())
141142
Map<Long, List<String>> map = null;
142143
try {
143-
map = Files.lines(Paths.get("sql_tokens.txt"))
144+
map = Files.lines(Paths.get(fileName))
144145
.collect(Collectors.groupingBy((t) -> {
145-
String name = t;
146+
long hash = fun.apply(t);
147+
/*String name = t;
146148
char size = (char)name.length();
147149
long seed = 41;
148-
long hash = 0;
150+
149151
for(int i=0; i<size; i++) {
150152
byte c = shrinkCharTbl[name.charAt(i)-'$'];
151153
//BKDRHash
152154
hash = hash * seed + c;
153155
};
154-
return (long)((hash & (0x1ffL << (long)x)) >> (long)x);
156+
return (long)((hash & (0x1ffL << (long)x)) >> (long)x);*/
157+
158+
return (long)((hash & (maskBit << (long)x)) >> (long)x);
155159
// return t.name().chars().sum();
156160
}
157161
));
@@ -177,17 +181,6 @@ static void sqlKeyHastTest() {
177181

178182
});}
179183

180-
//当左移位数为以下数值时,SQL关键字8位索引不会发生碰撞
181-
// result = 24
182-
// result = 25
183-
// result = 26
184-
// result = 27
185-
// result = 28
186-
// result = 29
187-
// result = 30
188-
// result = 31
189-
// }
190-
191184
static long genHash(char[] str) {
192185
int seed = 41;
193186
long hash = 0;
@@ -334,11 +327,14 @@ static void skipXXXTokenGenerator() {
334327
System.out.format("final void skip%sToken() {\npos+=%d;\n}%n", keyword, keyword.length());
335328
});
336329
}
337-
static void GenerateSqlTokenHash() {
330+
static void GenerateSqlTokenHash(String fileName) {
338331
initShrinkCharTbl();
339332
try {
340-
Files.lines(Paths.get("minimal_sql_tokens.txt")).forEach(x -> {
341-
System.out.format(" public static final int %s = 0x%x%04x;%n", x, genHash2(x.toCharArray()) & 0xFFFF, x.length());
333+
Files.lines(Paths.get(fileName))
334+
.filter(x -> x.length()>0)
335+
.forEach(x -> {
336+
System.out.format(" public static final int %-16s = 0x%04x%04x;%n", x, genHash2(x.toCharArray()) & 0xFFFF, x.length());
337+
// System.out.format(" public static final int %s = 0x%x;%n", x, genHash2(x.toCharArray()));
342338
});
343339
// System.out.println("conflict count : "+count);
344340
} catch (IOException e) {
@@ -349,9 +345,11 @@ static void GenerateSqlTokenHash() {
349345
public static void main(String[] args) {
350346
//isXXXTokenGenerator();
351347
//skipXXXTokenGenerator();
352-
// sqlKeyHastTest();
348+
// sqlKeyHastTest("sql_tokens.txt", s -> genHash(s.toCharArray()), 0x1FFL);
349+
// sqlKeyHastTest("minimal_sql_tokens.txt", s -> (long)genHash2(s.toCharArray()), 0x1FL);
350+
// sqlKeyHastTest("minimal_sql_tokens.txt", s -> genHash(s.toCharArray()), 0x3FL);
353351
// run();
354352
// test1();
355-
GenerateSqlTokenHash();
353+
GenerateSqlTokenHash("minimal_sql_tokens.txt");
356354
}
357355
}

0 commit comments

Comments
 (0)