Postgresql uuid_generate_v5 使用 Arel
Postgresql uuid_generate_v5 using Arel
我正在尝试使用 Arel 构建如下查询:
SELECT uuid_generate_v5(uuid_ns_url(),CONCAT('hello', 'world')) # 3fc82e1a-b051-595a-8564-27a096716d37
到目前为止我有以下内容:
composite_keys = ['hello', 'world']
quoted_composite_keys = composite_keys.map do |composite_key|
Arel::Nodes.build_quoted(composite_key)
end
concat = Arel::Nodes::NamedFunction.new('concat', quoted_composite_keys)
uuid_ns_url = Arel::Nodes::NamedFunction.new('uuid_ns_url', [])
uuid_generate_v5 = Arel::Nodes::NamedFunction.new('uuid_generate_v5', [uuid_ns_url, concat]).as('uuid')
select_statement = Arel::SelectManager.new(ActiveRecord::Base, project: uuid_generate_v5)
但是在执行 select_statement.to_sql
时出现以下错误:
*** RuntimeError Exception: unsupported: Hash
nil
看来问题是关于要投影的内容,我不确定要传递给 select
什么。
有人使用 Arel 做过类似的事情吗?
事实证明,我在创建 SelectManager
:
时需要使用稍微不同的语法
select_statement = Arel::SelectManager.new(ActiveRecord::Base).project(uuid_generate_v5)
我正在尝试使用 Arel 构建如下查询:
SELECT uuid_generate_v5(uuid_ns_url(),CONCAT('hello', 'world')) # 3fc82e1a-b051-595a-8564-27a096716d37
到目前为止我有以下内容:
composite_keys = ['hello', 'world']
quoted_composite_keys = composite_keys.map do |composite_key|
Arel::Nodes.build_quoted(composite_key)
end
concat = Arel::Nodes::NamedFunction.new('concat', quoted_composite_keys)
uuid_ns_url = Arel::Nodes::NamedFunction.new('uuid_ns_url', [])
uuid_generate_v5 = Arel::Nodes::NamedFunction.new('uuid_generate_v5', [uuid_ns_url, concat]).as('uuid')
select_statement = Arel::SelectManager.new(ActiveRecord::Base, project: uuid_generate_v5)
但是在执行 select_statement.to_sql
时出现以下错误:
*** RuntimeError Exception: unsupported: Hash
nil
看来问题是关于要投影的内容,我不确定要传递给 select
什么。
有人使用 Arel 做过类似的事情吗?
事实证明,我在创建 SelectManager
:
select_statement = Arel::SelectManager.new(ActiveRecord::Base).project(uuid_generate_v5)