@@ -57,32 +57,51 @@ protected enum StatementType {
5757 SELECT , INSERT , DELETE , UPDATE , CREATE , DROP , ALTER , TRUNCATE , USE , SHOW , DESCRIBE , EXPLAIN , SET , KILL , OTHER
5858 }
5959
60- protected StatementType parseStatementType (String sql ) {
61- String [] tokens = sql .trim ().split ("\\ s+" );
62- if (tokens .length == 0 ) {
60+ protected static StatementType parseStatementType (String sql ) {
61+ if (sql == null ) {
6362 return StatementType .OTHER ;
6463 }
6564
66- switch (tokens [0 ].toUpperCase ()) {
67- case "SELECT" : return StatementType .SELECT ;
68- case "INSERT" : return StatementType .INSERT ;
69- case "DELETE" : return StatementType .DELETE ;
70- case "UPDATE" : return StatementType .UPDATE ;
71- case "CREATE" : return StatementType .CREATE ;
72- case "DROP" : return StatementType .DROP ;
73- case "ALTER" : return StatementType .ALTER ;
74- case "TRUNCATE" : return StatementType .TRUNCATE ;
75- case "USE" : return StatementType .USE ;
76- case "SHOW" : return StatementType .SHOW ;
77- case "DESCRIBE" : return StatementType .DESCRIBE ;
78- case "EXPLAIN" : return StatementType .EXPLAIN ;
79- case "SET" : return StatementType .SET ;
80- case "KILL" : return StatementType .KILL ;
81- default : return StatementType .OTHER ;
65+ String trimmedSql = sql .trim ();
66+ if (trimmedSql .isEmpty ()) {
67+ return StatementType .OTHER ;
8268 }
69+
70+ trimmedSql = trimmedSql .replaceAll ("/\\ *.*?\\ */" , "" ).trim (); // remove comments
71+ String [] lines = trimmedSql .split ("\n " );
72+ for (String line : lines ) {
73+ String trimmedLine = line .trim ();
74+ //https://clickhouse.com/docs/en/sql-reference/syntax#comments
75+ if (!trimmedLine .startsWith ("--" ) && !trimmedLine .startsWith ("#!" ) && !trimmedLine .startsWith ("#" )) {
76+ String [] tokens = trimmedLine .split ("\\ s+" );
77+ if (tokens .length == 0 ) {
78+ continue ;
79+ }
80+
81+ switch (tokens [0 ].toUpperCase ()) {
82+ case "SELECT" : return StatementType .SELECT ;
83+ case "INSERT" : return StatementType .INSERT ;
84+ case "DELETE" : return StatementType .DELETE ;
85+ case "UPDATE" : return StatementType .UPDATE ;
86+ case "CREATE" : return StatementType .CREATE ;
87+ case "DROP" : return StatementType .DROP ;
88+ case "ALTER" : return StatementType .ALTER ;
89+ case "TRUNCATE" : return StatementType .TRUNCATE ;
90+ case "USE" : return StatementType .USE ;
91+ case "SHOW" : return StatementType .SHOW ;
92+ case "DESCRIBE" : return StatementType .DESCRIBE ;
93+ case "EXPLAIN" : return StatementType .EXPLAIN ;
94+ case "SET" : return StatementType .SET ;
95+ case "KILL" : return StatementType .KILL ;
96+ default : return StatementType .OTHER ;
97+ }
98+ }
99+ }
100+
101+ return StatementType .OTHER ;
83102 }
84103
85- protected String parseTableName (String sql ) {
104+ protected static String parseTableName (String sql ) {
86105 String [] tokens = sql .trim ().split ("\\ s+" );
87106 if (tokens .length < 3 ) {
88107 return null ;
0 commit comments