DBIx::Class (::Schema::Loader) の Sybase スキーマをダンプする Perl ライブラリの場合、DEFAULT と計算カラムをイントロスペクトできる必要があります。
次があるとします。
create table bar (
id INTEGER IDENTITY PRIMARY KEY,
foo VARCHAR(10) DEFAULT 'foo',
adt AS getdate(),
ts timestamp
)
これが私が得た限りです:
select substring(c.name,1,5) name, c.cdefault, c.computedcol from syscolumns c
join sysobjects o on c.id = o.id where o.name = 'bar' and o.type = 'U'
name cdefault computedcol
---------- ----------- -----------
id 0 NULL
foo 602182610 NULL
adt 0 618182667
ts 0 NULL
これは、列「foo」に、値を返す ID 602182610 のストアド プロシージャがあることを示しています。この ID から元の DEFAULT 'foo' を取得するにはどうすればよいですか?
タイムスタンプ列には、計算された列オブジェクトもデフォルトの sproc もありませんが、実際にはタイムスタンプ列であることを何とか知る必要があります。DBI から返されたデータ型を見ると、タイムスタンプの内部表現である「varbinary」であることがわかります。それがそうであるかそうでないかをどうやって知ることができますか?
また、列「adt」が計算列であり、この列のオブジェクトの ID が 618182667 であることもわかります。
その ID の sysobjects を調べると、次の点を除いて、有用と思われることはほとんどわかりません。
select substring(name,1,15) name, type from sysobjects where id = 618182667
name type
------------------------------ ----
bar_adt_6181826 C
どんな助けでも大歓迎です。