![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Есть такой оккультный стек-трейс: https://gist.github.com/def1fa8666a8ac83130a.
Причина в том, что в деконструктор массивов кложури вида (let [sql & params] some-array] передан пустой массив и строка sql в таком случае становится null и оный null передается в jdbc драйвер.
Строка на которой валится NPE, выглядит следующим образом:
protected boolean checkForEscapes(String sql) {
sql = sql.toLowerCase();
А вопрос, вообще говоря, в следующем: почему никто не проверяет параметр на валидность хотя бы в одной точке входа в одной из трех либ (clojure.java.jdbc, apache dbcp или jaybird)?
Выглядит так, как будто нормальную проверку параметров на валидность на границах API в жабе делать не принято.
PS:
artureg упорно убеждает меня, что "пусть валится", потому что проверка должна быть "в другом слое". Судя по всему, все разработчики думают, что обработка ошибок должна быть в другом слое :)
Причина в том, что в деконструктор массивов кложури вида (let [sql & params] some-array] передан пустой массив и строка sql в таком случае становится null и оный null передается в jdbc драйвер.
Строка на которой валится NPE, выглядит следующим образом:
protected boolean checkForEscapes(String sql) {
sql = sql.toLowerCase();
А вопрос, вообще говоря, в следующем: почему никто не проверяет параметр на валидность хотя бы в одной точке входа в одной из трех либ (clojure.java.jdbc, apache dbcp или jaybird)?
Выглядит так, как будто нормальную проверку параметров на валидность на границах API в жабе делать не принято.
PS:
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
no subject
Date: 2012-10-10 08:51 am (UTC)(let [[a b c d] [1 2 3]] [a b c d])
;[1 2 3 nil]
(let [[a b c d] []] [a b c d])
;[nil nil nil nil]
Если массив меньше, чем образец, которым его деконструируют, то соответствующие имена биндятся c nil.
Я передал пустой массив, который в итоге попал в такой деконструктор, первым параметром которого идет строка sql-запроса.
no subject
Date: 2012-10-10 09:40 am (UTC)Долбаная динамика. И ведь наверняка найдётся 100500 случаев когда это именно то что надо.
no subject
Date: 2012-10-10 09:48 am (UTC)Тема null в строках в жабе и дотнете - это отдельная стремная печаль, там строка - это одновременно и ссылка и значение - она иммутабельна, как значение, но является объектом-ссылкой :)
no subject
Date: 2012-10-10 11:53 pm (UTC)no subject
Date: 2012-10-11 04:58 am (UTC)