まじですか

7月に協力会社から来ていた人のSQLがやばいことが判明。

  1. x < Aの否定がことごとくx > A
  2. 条件が違うだけのSELECT句をUNION ALLでつなぎまくる
  3. そこらじゅうに散らばるリテラル
  4. 微妙な条件式
  5. CASE式の中のすさまじい重複

などなど。
1番目は明らかなバグ。こいつ、よく今までこれでやってこれたな。


2番目のはこんな感じ。

SELECT * FROM SomeTable WHERE Hoge = 0

UNION ALL

SELECT * FROM SomeTable WHERE Hoge = 1


3番目、4番目のはこんな感じ。

A.Date >= (CASE WHEN B.Date = 0 THEN '19000101' ELSE B.Date END) AND
A.Date <= (CASE WHEN B.Date = 0 THEN '21000101' ELSE B.Date END)


5番目のはこんな感じ。

CASE
WHEN Hoge = 'H' THEN /* 文字列関数を駆使してなにかやっている */ + 1  /* 左に同じ */
WHEN Hoge = 'O' THEN /* 上と全く同じコード */ + 10 /* 上と全く同じコード */
WHEN Hoge = 'G' THEN /* 上と全く同じコード */ + 15 /* 上と全く同じコード */
WHEN Hoge = 'E' THEN /* 上と全く同じコード */ + 20 /* 上と全く同じコード */
END


1、2、3、4は同じSQL内でのコンボ、5があったコードはまだちゃんと見て無いからどんなコンボがくるかは不明・・・
あの、こいつSQLも書ける、調査能力もある、業務の知識もあるってことで来たやつなんですけど・・・?調査能力ってあれか、コピペの技能のこと?


彼だけが悪いわけじゃないんだけど*1、いざこれを修正する身になってしまうと怒りというか、むなしさがこみ上げてくる。なんでやつのほうが給料上なんだよ・・・


なんというか、開発要員を選べるような立場になったとしたら、絶対コードを書かせようと思った。あと正規表現とエディタのマクロ機能もできれば使える人がいいな、とも。でもそうすると、人員が集まらないのかな・・・

*1:あいまいな言葉でしか仕様を伝えられないSさんとかろくにテストもしてないくせに100%終わったことにしていたSさんとかSQL見せると「SQLはわからないから」とか言って逃げるSさんとか