rails:41
From: Masayoshi Takahashi <maki@r...>
Date: Sun, 13 Feb 2005 15:47:40 +0900 (JST)
Subject: [rails:41] 参加します / PostgreSQL 7.3 対応パッチ
ML: rails@r...
新メンバー: maki@r...
高橋征義です。はじめまして。
ところで、PostgreSQLでRailsを使ってる人は、みんな7.4以上を
インストールしているんでしょうか? ActiveRecord 1.6.0では
information_schemaを使っているため、7.3以下では動作しない
ようです。むーん。
というわけで、むりやり7.3以下で動かすためのパッチです。
○問題点
・column_defaultは強制的にNULLにしてます。ので、問題あるかも。
・スキーマが扱えません。
SQLを変えれば対応できますけど、さらに古いPostgreSQLでは
スキーマもないため、対応の有無を判別する必要があります。
とすると、毎回SQLを一回多めに発行しなくちゃいけなくなる
ので、うれしくなさそう。
(これってadapterを分けるべきなんですかね?)
--- postgresql_adapter.rb.orig Sun Feb 13 13:45:27 2005
+++ postgresql_adapter.rb Sun Feb 13 15:12:52 2005
@@ -145,11 +145,23 @@
schema_name, table_name = split_table_schema(table_name)
# Grab a list of all the default values for the columns.
- sql = "SELECT column_name, column_default, character_maximum_length, data_type "
- sql << " FROM information_schema.columns "
- sql << " WHERE table_catalog = '#{database_name}' "
- sql << " AND table_schema = '#{schema_name}' "
- sql << " AND table_name = '#{table_name}';"
+ sql = "SELECT a.attname, NULL, "
+ sql << " case when t.typname='bpchar' then a.atttypmod-4 "
+ sql << " when t.typname='varchar' then a.atttypmod-4 "
+ sql << " when t.typname='numeric' then (a.atttypmod-4) / 65536 "
+ sql << " when t.typname='decimal' then (a.atttypmod-4) / 65536 "
+ sql << " when t.typname='date' then 10 "
+ sql << " when t.typname='time' then 8 "
+ sql << " when t.typname='timestamp' then 19 "
+ sql << " when t.typname='bool' then 1 "
+ sql << " end AS attsize, "
+ sql << " t.typname "
+ sql << " FROM pg_type t, pg_attribute a, pg_class c "
+ sql << " WHERE a.attrelid = c.oid AND t.oid = a.atttypid "
+ sql << " AND c.oid = a.attrelid AND a.attnum >= 0 "
+ sql << " AND c.relkind = 'r'"
+ sql << " AND c.relname = '#{table_name}'"
+ sql << " ORDER BY a.attnum"
column_defaults = nil
log(sql, nil, @connection) { |connection| column_defaults = connection.query(sql) }
それではみなさまよろしくお願いいたします。
高橋征義 (Masayoshi Takahashi) E-mail: maki@r...
--
ML: rails@r...
使い方: http://QuickML.com/
このMLを退会する方法:
- 本文が空のメールを <rails@r...> に送ってください
- 本文が空のメールを送れない場合は、
本文に「退会」とだけ書いたメールを <rails@r...> に送ってください
(署名やhotmailの広告などがついて空メールを送れない場合など)
<rails@r...> のメンバー:
kazuhiko@f...
dan@d...
kazuhiko-rails@f...
qve02451@n...
gollum@h...
matz@r...
sho@s...
zn@m...
babie7a0@y...
shintaro@k...
inoue@f...
lemo@p...
hoti_jp@y...
dai_o@m...
moriq@m...
don@n...
akira@a...
maili31s@c...
taoy@r...
o-fukui@p...
dj.ryumu@g...
kida@n...
nrtkszk@y...
yuui.tanaka@n...
yuu@t...
uno@s...
maki@r...