2
如何獲取數據集列的數據類型。 或更一般的:如何獲取數據集的模式?續集:如何獲取數據集列的數據類型
想象我有以下情況:
require 'sequel'
DB = Sequel.sqlite()
DB.create_table(:data){
nvarchar :key
timestamp :timestamp
Date :date
}
sel = DB[:data].select(:key, :timestamp)
現在我想知道,這數據類型是我選擇列timestamp
。
我想得到類似Sequel::Dataset#columntype(column)
的東西。
我做了這樣一個解決方案:
module Sequel
class Dataset
def schema()
schema = []
self.db.schema(self).each{|colid, coldef|
next unless self.columns.include?(colid)
schema << [colid, coldef]
}
schema
end
def columntype(colname)
self.schema.each{|colid, coldef|
next unless colid == colname
return coldef[:type]
}
raise ArgumentError, "#{colname} not part of #{self.inspect}"
end
end
end
p sel.schema #-> [[:key, {:allow_null=>true, :default=>nil, :primary_key=>false,....
p sel.columntype(:timestamp) #-> :datetime
p sel.columntype(:key) #-> :string
p sel.columntype(:date) #-> ArgumentError
但這種方法看起來有點錯誤的,它不連接的工作原理:
p sel.join(:data).columntype(:timestamp)
#-> `schema': can only parse the schema for a dataset with a single from table (Sequel::Error)
我想也Dataset#schema_and_table
,但沒有成功:
p sel.schema_and_table(sel.first_source_table) #-> [nil, "data"]
在文檔中找不到其他方法嗎?
感謝您的澄清。這也是我的印象,但我想確定它。 – knut