2424import java .util .logging .Logger ;
2525import net .sf .jsqlparser .JSQLParserException ;
2626import net .sf .jsqlparser .parser .CCJSqlParserUtil ;
27+ import net .sf .jsqlparser .statement .Statement ;
28+ import net .sf .jsqlparser .parser .TokenMgrError ;
29+
2730import static net .sf .jsqlparser .test .TestUtils .*;
2831import org .apache .commons .io .FileUtils ;
2932import static org .junit .Assert .assertTrue ;
@@ -63,14 +66,17 @@ public void testAllSqlsParseDeparse() throws IOException {
6366 } catch (JSQLParserException ex ) {
6467 //LOG.log(Level.SEVERE, null, ex);
6568 LOG .log (Level .INFO , " -> PROBLEM {0}" , ex .toString ());
69+ } catch (TokenMgrError ex ) {
70+ //LOG.log(Level.SEVERE, null, ex);
71+ LOG .log (Level .INFO , " -> PROBLEM {0}" , ex .toString ());
6672 } catch (Exception ex ) {
6773 LOG .log (Level .INFO , " -> PROBLEM {0}" , ex .toString ());
6874 }
6975 }
7076 }
7177
7278 LOG .log (Level .INFO , "tested {0} files. got {1} correct parse results" , new Object []{count , success });
73- assertTrue (success >= 129 );
79+ assertTrue (success >= 130 );
7480 }
7581
7682 @ Test
@@ -89,4 +95,61 @@ public void testAllSqlsOnlyParse() throws IOException {
8995 }
9096 }
9197 }
98+
99+ @ Test
100+ public void testOperatorsWithSpaces () throws Exception {
101+ String sql ;
102+ Statement statement ;
103+
104+ // First, the regular way (normal for most databases).
105+ sql = "SELECT\n "
106+ + " Something\n "
107+ + "FROM\n "
108+ + " Sometable\n "
109+ + "WHERE\n "
110+ + " Somefield >= Somevalue\n "
111+ + " AND Somefield <= Somevalue\n "
112+ + " AND Somefield <> Somevalue\n "
113+ + " AND Somefield != Somevalue\n " ;
114+
115+ statement = CCJSqlParserUtil .parse (sql );
116+
117+ System .out .println (statement .toString ());
118+
119+ assertSqlCanBeParsedAndDeparsed (sql , true );
120+
121+ // Second, the special crap Oracle lets you get away with.
122+ sql = "SELECT\n "
123+ + " Something\n "
124+ + "FROM\n "
125+ + " Sometable\n "
126+ + "WHERE\n "
127+ + " Somefield > = Somevalue\n "
128+ + " AND Somefield < = Somevalue\n "
129+ + " AND Somefield < > Somevalue\n " ;
130+
131+ // Note, we do not (currently) test the "!=" with spaces in between -- Postgresql deals with this as two operators, "factorial" and "equals".
132+
133+ statement = CCJSqlParserUtil .parse (sql );
134+
135+ System .out .println (statement .toString ());
136+
137+ assertSqlCanBeParsedAndDeparsed (sql , true );
138+
139+ // And then with multiple whitespace
140+ sql = "SELECT\n "
141+ + " Something\n "
142+ + "FROM\n "
143+ + " Sometable\n "
144+ + "WHERE\n "
145+ + " Somefield > \t = Somevalue\n "
146+ + " AND Somefield < = Somevalue\n "
147+ + " AND Somefield <\t \t > Somevalue\n " ;
148+
149+ statement = CCJSqlParserUtil .parse (sql );
150+
151+ System .out .println (statement .toString ());
152+
153+ assertSqlCanBeParsedAndDeparsed (sql , true );
154+ }
92155}
0 commit comments