[前][次][番号順一覧][スレッド一覧]

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...

[前][次][番号順一覧][スレッド一覧]