1212import java .util .regex .Matcher ;
1313import java .util .regex .Pattern ;
1414import java .util .stream .Collectors ;
15+ import java .util .stream .Stream ;
1516
1617import org .slf4j .Logger ;
1718import org .slf4j .LoggerFactory ;
@@ -32,9 +33,27 @@ public class SqlCodeAreaSyntaxProvider implements CodeAreaSyntaxProvider<String>
3233 private static String DB_TYPE = "" ;
3334 private static List <String > FUNCTIONS ;
3435 private static List <String > TYPES ;
35- private static List <String > KEYWORDS ;
36-
37- private static final Set <Keyword > KEYWORDS_lIST = new LinkedHashSet <>();
36+ private static List <String > KEYWORDS = Arrays .asList (new String [] {
37+ "add" ,"ADD" ,"all" ,"ALL" ,"alter" ,"ALTER" ,"and" ,"AND" ,"any" ,"ANY" ,
38+ "as" ,"AS" ,"asc" ,"ASC" ,"backup" ,"BACKUP" ,"between" ,"BETWEEN" ,"by" ,"BY" ,
39+ "case" ,"CASE" ,"check" ,"CHECK" ,"column" ,"COLUMN" ,"constraint" ,"CONSTRAINT" ,"create" ,"CREATE" ,
40+ "database" ,"DATABASE" ,"default" ,"DEFAULT" ,"delete" ,"DELETE" ,"desc" ,"DESC" ,"distinct" ,"DISTINCT" ,
41+ "drop" ,"DROP" ,"else" ,"ELSE" ,"end" ,"END" ,"exists" ,"EXISTS" ,"foreign" ,"FOREIGN" ,
42+ "from" ,"FROM" ,"full" ,"FULL" ,"group" ,"GROUP" ,"having" ,"HAVING" ,"in" ,"IN" ,
43+ "index" ,"INDEX" ,"inner" ,"INNER" ,"insert" ,"INSERT" ,"into" ,"INTO" ,"is" ,"IS" ,
44+ "join" ,"JOIN" ,"key" ,"KEY" ,"left" ,"LEFT" ,"like" ,"LIKE" ,"limit" ,"LIMIT" ,
45+ "not" ,"NOT" ,"null" ,"NULL" ,"on" ,"ON" ,"or" ,"OR" ,"order" ,"ORDER" ,
46+ "outer" ,"OUTER" ,"primary" ,"PRIMARY" ,"procedure" ,"PROCEDURE" ,"right" ,"RIGHT" ,"rownum" ,"ROWNUM" ,
47+ "select" ,"SELECT" ,"set" ,"SET" ,"table" ,"TABLE" ,"top" ,"TOP" ,"truncate" ,"TRUNCATE" ,
48+ "union" ,"UNION" ,"unique" ,"UNIQUE" ,"update" ,"UPDATE" ,"values" ,"VALUES" ,"view" ,"VIEW" ,
49+ "where" ,"WHERE" ,"with" ,"WITH" ,"grant" ,"GRANT" ,"revoke" ,"REVOKE" ,"commit" ,"COMMIT" ,
50+ "rollback" ,"ROLLBACK" ,"savepoint" ,"SAVEPOINT" ,"transaction" ,"TRANSACTION" ,"cascade" ,"CASCADE" ,"restrict" ,"RESTRICT" ,
51+ "replace" ,"REPLACE" ,"declare" ,"DECLARE" ,"cursor" ,"CURSOR" ,"fetch" ,"FETCH" ,"open" ,"OPEN" ,
52+ "close" ,"CLOSE" ,"loop" ,"LOOP" ,"while" ,"WHILE" ,"if" ,"IF" ,"then" ,"THEN" ,
53+ "elsif" ,"ELSIF" ,"return" ,"RETURN" ,"language" ,"LANGUAGE" ,"function" ,"FUNCTION" ,"trigger" ,"TRIGGER"
54+ });
55+
56+ private static final Set <Keyword > KEYWORDS_lIST = new LinkedHashSet <>(KEYWORDS .stream ().map (word -> new Keyword (word , KeywordType .KEYWORD )).toList ());
3857 private static final Map <String , Set <String >> COLUMNS_MAP = new HashMap <>();
3958
4059 private static final String PAREN_PATTERN = "\\ (|\\ )" ;
@@ -46,9 +65,13 @@ public class SqlCodeAreaSyntaxProvider implements CodeAreaSyntaxProvider<String>
4665// private static final String NUMBERS_PATTERN = "[0-9]+";
4766 private static final String METHOD_PATTERN = "\\ .[a-zA-Z0-9_]+" ;
4867
49- private static String KEYWORD_PATTERN ;
68+ private static String KEYWORD_PATTERN = " \\ b(" + String . join ( "|" , KEYWORDS ) + ") \\ b" ;
5069 private static String FUNCTIONS_PATTERN ;
51- private static Pattern PATTERN ;
70+ private static Pattern PATTERN = Pattern .compile ("(?<KEYWORD>" + KEYWORD_PATTERN + ")" + "|(?<PAREN>" + PAREN_PATTERN + ")"
71+ + "|(?<SEMICOLON>" + SEMICOLON_PATTERN + ")" + "|(?<STRING>" + STRING_PATTERN + ")"
72+ + "|(?<STRING2>" + STRING_PATTERN_2 + ")" + "|(?<COMMENT>" + COMMENT_PATTERN + ")" + "|(?<METHOD>" + METHOD_PATTERN + ")"
73+ );
74+
5275
5376 public static void init (String dbType ) {
5477 DB_TYPE = dbType ;
@@ -59,7 +82,12 @@ private static void init() {
5982 var funcs = getAutocomplteWords ("funcs" );
6083 FUNCTIONS = funcs .stream ().map (dto -> (String ) dto .get ("name" )).toList ();
6184 TYPES = getAutocomplteWords ("types" ).stream ().map (dto -> (String ) dto .get ("name" )).toList ();
62- KEYWORDS = getAutocomplteWords ("sql" ).stream ().map (dto -> (String ) dto .get ("name" )).toList ();
85+ KEYWORDS = Stream .concat (
86+ KEYWORDS .stream (),
87+ getAutocomplteWords ("sql" ).stream ().map (dto -> (String ) dto .get ("name" ))
88+ )
89+ .distinct ()
90+ .collect (Collectors .toList ());
6391
6492 KEYWORD_PATTERN = "\\ b(" + String .join ("|" , KEYWORDS ) + ")\\ b" ;
6593 FUNCTIONS_PATTERN = "\\ b(" + String .join ("|" , FUNCTIONS ) + ")\\ b" ;
0 commit comments