@Test
  public void testGetVariable() throws Exception {
    GenericSqlParser parser = new GenericSqlParser();

    Driver driver = new GenericJdbcDriver();

    assertNull(parser.getVariable("test", driver));

    assertNull(parser.getVariable("integer_test", driver));

    Variable var = parser.getVariable("out_integer_test", driver);

    assertNotNull(var);

    assertTrue("test".equals(var.getName()));

    assertTrue(String.valueOf(Types.INTEGER).equals(var.getType()));

    var = parser.getVariable("out_VARCHAR_xyz", driver);

    assertNotNull(var);

    assertTrue("xyz".equals(var.getName()));

    assertTrue(String.valueOf(Types.VARCHAR).equals(var.getType()));
  }
  @Test
  public void testRemoveChars() throws Exception {
    GenericSqlParser parser = new GenericSqlParser();

    assertTrue("select * from dual".equals(parser.removeChars("select * from dual")));

    assertTrue("select * from dual".equals(parser.removeChars("select * \rfrom \rdual")));
  }
  @Test
  public void testStripComments() throws Exception {
    GenericSqlParser parser = new GenericSqlParser();

    assertTrue("select * from dual;".equals(parser.stripComments("select * from dual;")));

    assertTrue(
        "select *  from dual;".equals(parser.stripComments("select * /* a;;bc */ from dual;")));

    String sql =
        "select * from dual;--xxx\n"
            + " select * \nfrom abc /* dasdsads\n djdsfkjlkdsf */ order by 1; --sfljljdfsjs";

    String noComments = parser.stripComments(sql);

    assertTrue("select * from dual; select * from abc  order by 1;".equals(noComments.trim()));

    assertTrue(
        Utils.isNothing(parser.stripComments("/*select * from dual;/n dask;kdsa;akds */   ")));

    assertTrue(Utils.isNothing(parser.stripComments("-- adsjlkdsajlkdasjldsajdslajdks")));

    assertTrue(
        "select * from dual;".equals(parser.stripComments("select * from dual;--ajsddasjladsljk")));
  }
  @Test
  public void testSetBindVariables() throws Exception {
    GenericSqlParser parser = new GenericSqlParser();

    Map<String, Object> properties = new HashMap<String, Object>();

    properties.put("var1", 1);
    properties.put("var2", 2);

    assertTrue(
        "select * from dual".equals(parser.setBindVariables("select * from dual", properties)));

    assertTrue(
        "select * from dual where x = 1 and y = 2"
            .equals(
                parser.setBindVariables(
                    "select * from dual where x = :var1 and y = :var2", properties)));
  }
  @Test
  public void testParseParams() throws Exception {
    GenericSqlParser parser = new GenericSqlParser();

    Driver driver = new GenericJdbcDriver();

    Map<String, List<Integer>> paramMap = new HashMap<String, List<Integer>>();

    parser.parseParams(
        "select * from abc /* xx = :abc*/ where xyz = :xyz and abc = :abc and mmm = :xyz",
        null,
        paramMap,
        null,
        driver);

    assertTrue(paramMap.size() == 2);

    assertTrue(paramMap.containsKey("xyz"));

    assertTrue(paramMap.get("xyz").size() == 2);

    assertTrue(paramMap.get("xyz").get(0) == 1);
    assertTrue(paramMap.get("xyz").get(1) == 3);

    assertTrue(paramMap.containsKey("abc"));

    paramMap = new HashMap<String, List<Integer>>();

    List<String> outputParams = new ArrayList<String>();

    parser.parseParams(
        "begin abc = :abc; :out_integer_xyz = :mmm; end", null, paramMap, outputParams, driver);

    assertTrue(outputParams.size() == 1);

    assertTrue("out_integer_xyz".equals(outputParams.get(0)));
  }
  @Test
  public void testSplit() throws Exception {
    GenericSqlParser parser = new GenericSqlParser();

    String sql = "select * from dual";

    String[] statements = parser.split(sql);

    assertTrue(statements.length == 1);

    assertTrue("select * from dual".equals(statements[0].trim()));

    sql = "--select * from dual";

    statements = parser.split(sql);

    assertTrue(statements.length == 1);

    assertTrue(Utils.isNothing(statements[0].trim()));

    sql = "  /* select * from dual */  ";

    statements = parser.split(sql);

    assertTrue(statements.length == 1);

    assertTrue(Utils.isNothing(statements[0].trim()));

    sql = "select * from dual /* dsdskfds;ksd;fkdfs;*/;select * from test";

    statements = parser.split(sql);

    assertTrue(statements.length == 2);

    assertTrue("select * from dual /* dsdskfds;ksd;fkdfs;*/".equals(statements[0].trim()));
    assertTrue("select * from test".equals(statements[1].trim()));
  }
  @Test
  public void testIsCallable() throws Exception {
    GenericSqlParser parser = new GenericSqlParser();

    assertTrue(!parser.isCallable("select * from dual"));

    assertTrue(!parser.isCallable("create table abc (a int);"));

    assertTrue(parser.isCallable("create procedure xxx begin end"));

    assertTrue(parser.isCallable("create procedure xxx end procedure"));

    assertTrue(parser.isCallable("begin xxx; end;"));
  }