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