### Question:
SqlParser { public SqlNode parseQuery() throws SqlParseException { try { return parser.parseSqlStmtEof(); } catch (Throwable ex) { throw handleException(ex); } } private  SqlParser(SqlAbstractParserImpl parser,
      Config config); static SqlParser create(String s); static SqlParser create(String sql, Config config); static SqlParser create(Reader reader, Config config); SqlNode parseExpression(); SqlNode parseQuery(); SqlNode parseQuery(String sql); SqlNode parseStmt(); SqlNodeList parseStmtList(); SqlAbstractParserImpl.Metadata getMetadata(); List<CalciteContextException> getWarnings(); static Config config(); @Deprecated // to be removed before 2.0 static ConfigBuilder configBuilder(); @Deprecated // to be removed before 2.0 static ConfigBuilder configBuilder(Config config); static final int DEFAULT_IDENTIFIER_MAX_LENGTH; @Deprecated // to be removed before 2.0
  static final boolean DEFAULT_ALLOW_BANG_EQUAL; }### Answer:
@Test void testParseWithReader() throws Exception { String query = "select * from dual"; SqlParser sqlParserReader = getSqlParser(new StringReader(query), b -> b); SqlNode node1 = sqlParserReader.parseQuery(); SqlParser sqlParserString = getSqlParser(query); SqlNode node2 = sqlParserString.parseQuery(); assertEquals(node2.toString(), node1.toString()); }