如何获取数据集列的数据类型。或更笼统地说:如何获取数据集的模式?
想象一下我有以下情况:
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"]
还有其他我在文档中没有找到的方法吗?