スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

rubyでSQL文を生成する時にちょっと便利な方法

SQL文をプログラムで生成をする時に、配列の要素が最初なのか最後なのかでカンマを出したり出さなかったりします。
例えばrubyで書くとこんな感じです。

require "erb"
table_name = "t_test"
columns = ["id", "name"]
template = <<-EOS
INSERT INTO <%= table_name %> (
<%- columns.each_with_index() do |column, index| -%>
<%= "," if 0 == index %><%= column %>
<%- end -%>
) VALUES (
<%- columns.each_with_index() do |column, index| -%>
<%= "$" + (index + 1).to_s %><%= "," if columns.size() - 1 > index %>
<%- end -%>
);
EOS
puts ERB.new(template, nil, '-').result(binding)

実行結果は以下の通りです。

INSERT INTO t_test (
id
,name
) VALUES (
$1,
$2
);

前後にカンマを置く判定があまりきれいではありません。
数が多くなると打ち間違いやすいし、他の人が見たときに直感的でもありません。
そこでわかりやすいメソッドをArrayクラスに追加してみました。

require "erb"

class Array
def each_with_index_first_last()
each_with_index() do |item, index, first, last|
yield(item, index, 0 == index, size() - 1 == index)
end
end
end

table_name = "t_test"
columns = ["id", "name"]
template = <<-EOS
INSERT INTO <%= table_name %> (
<%- columns.each_with_index_first_last() do |column, index, first, last| -%>
<%= "," if !first %><%= column %>
<%- end -%>
) VALUES (
<%- columns.each_with_index_first_last() do |column, index, first, last| -%>
<%= "$" + (index + 1).to_s %><%= "," if !last %>
<%- end -%>
);
EOS
puts ERB.new(template, nil, '-').result(binding)

rubyは定義済みクラスの拡張が容易なのがいいですね。
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。