?

Log in

No account? Create an account

[icon] ON ProjectCarrier.ProjectId = ProjectCarrier.ProjectId - Lorem Ipsum igitur, juvenes dum sumus
View:Свежие записи.
View:Архив.
View:Друзья.
View:Личная информация.
View:Website (Мой сайт).

Tags:,
Security:
Subject:ON ProjectCarrier.ProjectId = ProjectCarrier.ProjectId
Time:03:26 am
Вот примерно такое условие, как в сабже, встретил вчера в продакшен-коде, в двух местах.
Понятно, что таких ошибок от невнимательности и опечаток возникает масса, и я боюсь предположить, сколько их в нашей базе кода.

Посему вопрос: не встречались ли уважаемые колеги с автоматическими тулзами, умеющими такие косяки отлавливать, по схеме базы данных, например?
Хочется запустить что-то такое и ужаснуться. Самому писать не хочется:)
comments: Оставить комментарий Previous Entry Поделиться Next Entry


evg25
Link:(Link)
Time:2013-08-06 08:49 am
Переходи на питон, он такое определяет как синтаксическую ошибку :-)
(Ответить) (Thread)


torrio
Link:(Link)
Time:2013-08-06 08:53 am
У меня десятки мегабайт исходников на дотнете, ошибки, которые я хочу найти - вообще в T-SQL, а ты мне предлагаешь перейти на питон?! Это, конечно, идеальное решение:)
(Ответить) (Parent) (Thread)


evg25
Link:(Link)
Time:2013-08-06 08:54 am
Я знаю, что идеальное, потому и предлагаю. :-)

(мне смайлик побольше поставить?) :-)
Просто, когда я обнаружил это в питоне, то очень порадовался :-)
(Ответить) (Parent) (Thread)


vgramagin
Link:(Link)
Time:2013-08-06 12:23 pm
Для Java мы используем Findbugs - он такое, безусловно, отлавливает.
(Ответить) (Thread)


torrio
Link:(Link)
Time:2013-08-06 12:33 pm
Он и в T-SQL отлавливает?!
(Ответить) (Parent) (Thread)


vgramagin
Link:(Link)
Time:2013-08-06 12:51 pm
Умммм, не уверен что в таком виде сработает. Но наверняка есть статиканалайзеры и для SQL тоже.
(Ответить) (Parent) (Thread)


torrio
Link:(Link)
Time:2013-08-06 12:35 pm
В целом, для C# у нас есть Re-Sharper, он со многим справляется и подсказывает всякое полезное, но вот оказалось, что есть еще непаханное поле в SQL... По идее, у нас куплен Red Gate SQL Tolbelt, но не факт, что он умеет:(
(Ответить) (Parent) (Thread)


antomus
Link:(Link)
Time:2013-08-06 03:33 pm
Если нужно только такие вот повторы найти, то можно использовать регулярные выражения например. Они так могут. Правда это не совсем подходит под определение "автоматической тулзы"...

Edited at 2013-08-06 15:35 (UTC)
(Ответить) (Thread)


torrio
Link:(Link)
Time:2013-08-06 04:25 pm
Тут немного сложнее. Тот пример, который я привел - такое тоже, конечно, случается, но в реальности, например, было написано вот так:

ON ProjectCarrier.ProjectId = ProjectId

Имелось в виду поле ProjectId из другой таблицы, но у парсера SQL свой взгляд на это:) И его нужно учитывать. Под "простой повтор" такая штука уже не подпадает...
(Ответить) (Parent) (Thread)


elder_george
Link:(Link)
Time:2013-08-06 06:21 pm
Хммм, мне SSMS выдал ошибку Msg 209, Level 16, State 1, Line 10
Ambiguous column name 'projectid'.
.

Пробовал вот так:


declare @ProjectCarrier table(
ProjectId INT NOT NULL
)

declare @Project table(
ProjectId INT NOT NULL
)

select * from @ProjectCarrier pc
inner join @project on pc.ProjectId = ProjectId


Ты что-то скрываешь!
(Ответить) (Parent) (Thread)


torrio
Link:(Link)
Time:2013-08-06 06:38 pm
Честное слово не вру! Ambiguous column name не возникло потому, что этот запрос был вложенный, и, видимо, ambiguity разрешилась за счёт более низкого приоритета таблицы из внешнего запроса...
(Ответить) (Parent) (Thread)


elder_george
Link:(Link)
Time:2013-08-06 06:45 pm
Коллеги подсказали, что есть, например, http://www.sqlcodeguard.com/ (плагин к SSMS) и http://www.ubitsoft.com/products/t-sql-analyzer/index.php (+ платная версия к нему). Может, ещё что-то подскажут…


Сам не пробовал. Ну и у нас SQL код отличный же =)
(Ответить) (Parent) (Thread)


torrio
Link:(Link)
Time:2013-08-06 06:48 pm
Спасибо!
(Ответить) (Parent) (Thread)


elder_george
Link:(Link)
Time:2013-08-06 06:49 pm
О, вот тут рассказывают, как гонять static analysis на SQL проектах. Правда, там тоже набор правил фиксированный, не факт, что покрывает твои сценарии.
(Ответить) (Parent) (Thread)


5_sb_werewolf93
Link:(Link)
Time:2013-08-06 06:18 pm
меня в мои косяки тыкает решарпер, но не думаю что он на столько глубоко анализирует код.
(Ответить) (Thread)


torrio
Link:(Link)
Time:2013-08-06 06:39 pm
Решарпер вроде как с T-SQL не работает... В C#, да, помогает!
(Ответить) (Parent) (Thread)

[icon] ON ProjectCarrier.ProjectId = ProjectCarrier.ProjectId - Lorem Ipsum igitur, juvenes dum sumus
View:Свежие записи.
View:Архив.
View:Друзья.
View:Личная информация.
View:Website (Мой сайт).