### Question:
RdbmsReader extends AbstractRdbmsComponentRuntime { protected static int countColumnSeparatingCommas(String value) { int count = 0; int p = 0; int q = 0; for (char c : value.toCharArray()) { if (c == '(') { p++; } else if (c == ')') { p--; } else if (c == '\'') { q++; } else if (c == ',' && p == 0 && q%2==0) { count++; } } return count; }  @Override void start(); @Override boolean supportsStartupMessages(); @Override void handle(final Message inputMessage, final ISendMessageCallback callback, boolean unitOfWorkBoundaryReached); static Map<Integer, String> getSqlColumnEntityHints(String sql); void setSqls(List<String> sqls); void setSql(String sql); void setRowsPerMessage(long rowsPerMessage); void setMatchOnColumnNameOnly(boolean matchOnColumnNameOnly); void setTrimColumns(boolean trimColumns); void setEntityChangeType(ChangeType entityChangeType); int getRowReadDuringHandle(); void setRunWhen(String runWhen); static final String TYPE; final static String TRIM_COLUMNS; final static String MATCH_ON_COLUMN_NAME_ONLY; final static String PASS_INPUT_ROWS_THROUGH; final static String RUN_WHEN; final static String UNIT_OF_WORK; static final String COMPONENT_LIFETIME; static final String SQL_SCRIPT; static final String SQL_STATEMENT; }### Answer:
@Test public void testCountColumnSeparatingCommas() { int count = RdbmsReader.countColumnSeparatingCommas("ISNULL(a,''), b, *"); assertEquals(count, 2); count = RdbmsReader.countColumnSeparatingCommas("ISNULL(a,('')), b, 'a,b', *"); assertEquals(count, 3); }