前提
select
最近、コード内のステートメントでバグに遭遇しました。何が起こっているのかを理解した後、修正するのはかなり簡単でしたが、同様のバグが再び発生しないようにする方法を見つけることに興味があります.
問題のあるクエリの例を次に示します。
select
the,
quick,
brown
fox,
jumped,
over,
the,
lazy,
dog
from table_name;
私が意図していたのは:
select
the,
quick,
brown,
fox,
jumped,
over,
the,
lazy,
dog
from table_name;
brown
前者は後ろのカンマが抜けています。これにより、as
キーワードが不要なため、列がエイリアス化されます。したがって、結果は次のようになります。
the,
quick,
fox,
jumped,
over,
the,
lazy,
dog
...brown
という名前の列にのすべての値がありますfox
。これは、上記のような短いクエリ (特に各列の値が非常に異なる場合) の場合は非常に簡単に気付くことができますが、次のようなほとんどが整数列のかなり複雑なクエリで発生しました。
select
foo,
bar,
baz,
another_table.quux,
a1,
a2,
a3,
a4,
a5,
a6,
a7,
a8,
a9,
a10,
a11,
a12,
a13,
a14,
a15,
a16,
b1,
b2,
b3,
b7,
b8,
b9,
b10,
b11,
b12,
b13,
b14,
b18,
b19,
b20,
b21,
c1,
c2,
c3,
c4,
c5,
c6,
c7,
c8
from table_name
join another_table on table_name.foo_id = another_table.id
where
blah = 'blargh'
-- many other things here
;
より良い列名を使用しても、値はすべて非常に似ています。b11
(たとえば) の後にカンマを逃して、すべてのb11
値が呼び出されb12
た場合、処理パイプラインを介してデータを実行するときに非常に残念です (結果の列名によって異なります)。通常ならそうしますselect * from table_name
が、それよりももう少し厳選する必要がありました。
質問
私が探しているのは、これが再び起こらないようにするための戦略です。
as
列をエイリアシングするときに要求する方法はありますか? または、エラーを発生させるための書き方のトリックですか?(たとえば、C ライクな言語では、誤って等号を忘れてコンパイル エラーが発生するのではなく、代わりに無効にして、1 == foo
書き始めました。)foo == 1
1 = foo
foo = 1
私はvim
通常使用しているので、目で見ることができるhlsearch
ようにコンマを強調表示するために使用できます。ただし、このようなことを簡単に行うことができない独自のインターフェイスを含め、他の環境でクエリを頻繁に作成する必要があります。
ご協力いただきありがとうございます!