S2Dao のIN句

いつの間にかIN句が使えるようになっていたので、IN句でのSELECTを試したのですが、
IN句の後に何かSQLがあった場合に、正しく動作しませんでした。


test.org.seasar.dao.parser.SqlParserImplTest にて testIn() のSQLを以下のように変更したところ、

String sql = "SELECT * FROM emp WHERE deptno IN /*deptnoList*/(10,20) ORDER BY empno";
String sql2 = "SELECT * FROM emp WHERE deptno IN (?, ?) ORDER BY empno";
SELECT * FROM emp WHERE deptno IN ?

となり、テストに失敗します。


それで、探ってみた所、

SqlTokenizerImpl#skipToken

に、問題があるようです。
ひょっとして、実装忘れ?という感じですが、
以下の「ここから〜ここまで」が必要では?

	public String skipToken() {
	
		省略...

			} else if (quoting && c == '?''
					&& (i + 1 >= sql_.length() || sql_.charAt(i + 1) != '?'')) {
				index = i + 1;
				break;
// ここから ---------------------------------------------------
			} else if (quoting && c == ')'
				&& (i + 1 >= sql_.length() || sql_.charAt(i + 1) != ')')) {
				index = i + 1;
				break;
// ここまで ---------------------------------------------------
			} else if (quoting && c == quote) {
				index = i + 1;
				break;
			}
		}
		省略...
	}

これも間違っているかも。


追記
上のコードのバックスラッシュが「?」に化けてます。
こういうのってMLに出した方がいいかな。