`
lllyq
  • 浏览: 34690 次
  • 性别: Icon_minigender_1
  • 来自: Shanghai
社区版块
存档分类
最新评论

插件rquerypad, 简化查询参数 增强关联查询能力

    博客分类:
  • ruby
阅读更多
http://code.google.com/p/rquerypad/
目前支持rails 2.0, rails 1.2(部分2.0 方式的查询))(谢谢Quake的测试及建议)

Simplify query options with association automation and improve inner join for activerecord of rails
字段名包含关联信息,不需额外再写include或者joins
原来activerecord仅支持inner join在最后,现在没有这个限制

不想用svn,直接下载可以到 https://rubyforge.org/projects/rquerypad/

Feature
=======
1. single name string decribe associations
2. support to mix inner join and outer join with any order
3. auto remove duplicated joins from other association in different depth
4. support :conditions,rder, :group
5. auto merge to original :include, :joins

Install
=======
ruby script/plugin install http://rquerypad.googlecode.com/svn/trunk/rquerypad

Example
=======
suppose the asscociations of User <-> Thread <-> Reply is 1:N:N

@users = User.find(:all, :group => ["threads.created_at", "name"])
generate:
[:all, {:group=>"threads.created_at, users.name", :include=>[:threads]}]

@users = User.find(:all, :conditions => ["threads_.replies.title = ?",
"rquerypad"])
generate:
[:all, {:inner_joins=>["threads"], :conditions=>["replies.title = ?", "rquerypad"], :include=>[{:threads=>:replies}]}]
#note: the :inner_joints is processed by rquerypad before sending sql to database

@users = User.find(:all, :conditions => ["threads.replies.title = ? and threads.id = ?", "rquerypad", 1])
generate:
[:all, {:conditions=>["replies.title = ? and threads.id = ?", "rquerypad", 1], :include=>[{:threads=>:replies}]}]
#note: single "threads" was removed from includes


Setup
=======
#to set debug model, in rails initialized script
$RQUERYPAD_DEBUG = true

#to support rails 1.2.6, in rails initialized script, such as environment.rb
#default support rails 2.0
$RQUERYPAD_RAILS = "1.2"


Test
=======
Note: current migrate script works only in rails 2.0

1.Prepare

the test depends on sqlite3 database, the following code should be add into your database.yml and place rquerypad.rb(copy from test.rb) in config/environment

rquerypad:
  adapter: sqlite3
  database: vendor/plugins/rquerypad/test/db.rquerypad
  timeout: 5000

2.database migrate

execute the following script

rake migrate

3.start test

execute the following script
rake
分享到:
评论
14 楼 leomayleomay 2008-04-09  
请给出一个模糊查询的实例,谢谢。
13 楼 lllyq 2008-03-21  
哪我估计ambition要大改才行,毕竟他走上一个更抽象的层次,又想适应特殊要求的具体场合,我想这也就是半年多以来他无视inner join的基本需求的原因
12 楼 Stainlesssteel 2008-03-21  
或许可以给ambition贡献一下

ambition 模仿 LINQ 还是有前途的
11 楼 lllyq 2008-03-21  
Stainlesssteel 写道
ambition的

User.detect { |u| u.email =~ 'chris%' && u.profile.blog == 'Err' }

"SELECT users.`id` AS t0_r0 ... FROM users
LEFT OUTER JOIN profiles ON profiles.user_id = users.id
WHERE ((users.`email` LIKE 'chris%' AND profiles.blog = 'Err'))
LIMIT 1"


我原来也没打算做rquerypad,想用ambition,但仔细看了下功能比较弱,inner join都不支持,更不要说乱序混合join了,花哨不实用只是花瓶

关于ambition, 我原来还想修改ambition来实现的,但发现ambition是用自己的优势绑住自己的脚,它抽象出核心部分,具体的ldap, sql的就做adpater,但sql毕竟比较复杂,要能达到sql的正常使用必须要扩展, 但是他的没有给adapter提供扩展能力,要改就要把ambition, 以及对应的adapter都改了,工作量还不如专门写一个针对activerecord的插件,这就是rquerypad的由来。

而且ambition为了用好看的ruby way(方向不错),还用到了parsetree,搞得太复杂,其实不过是activerecord的adapter,activerecord本来就弱,搞得再花也没用
10 楼 Stainlesssteel 2008-03-21  
ambition的

User.detect { |u| u.email =~ 'chris%' && u.profile.blog == 'Err' }

"SELECT users.`id` AS t0_r0 ... FROM users
LEFT OUTER JOIN profiles ON profiles.user_id = users.id
WHERE ((users.`email` LIKE 'chris%' AND profiles.blog = 'Err'))
LIMIT 1"
9 楼 lllyq 2008-03-21  
看看你报的是什么错?我并刚刚试用了act_as_tree,修复了一个bug,但跟act_as_tree关系不大,我试过find all, tree object.each 没问题

fix bug when field is a id with single table which has belongs_to association, such as "parent.id"

现在最新版是提交了0.1.5,并增加了相关act_as_tree的测试,你可以install最新的,如果还有问题,你贴一下测试代码,测试很简单,装了sqlite3(注意还要装sqlite3.dll到ruby/bin),然后再rquerypad下rake migrate, rake
8 楼 Raecoo 2008-03-21  
在Model使用 acts_as_tree 时发现有点问题
比如:
class Product < ActiveRecord::Base
acts_as_tree
end

products = Product.find(:all)

products.each do |p|
  p.children.each .....   这里就报错
  ..............
end

插件一安装就出这个问题,不知道是使用不当还是? 

环境 Rails 2.0.2
7 楼 lllyq 2008-03-20  
不好意思,要在environments.rb 的顶行写,保证在插件初始化之前,我还要补点注释

而且对rails 1.2兼容不是全兼容,find_all就不能兼容,只能兼容find(:all)

rquerypad 最新的是0.1.4版本,加了计算函数的支持,如 count/average
6 楼 sun201200204 2008-03-20  
我的是1.2.3版本  好像不行
undefined method `extract_options!' for [:all]:Array
(eval):9:in `find'

这里有一句@goal_status = GoalStatus.find(:all)


不知道是什么原因

在源代码中看到有个这个:
options = #{if $RQUERYPAD_RAILS == "1.2" then "extract_options_from_args!(args)" else "args.extract_options!" end}


可是有已经写上$RQUERYPAD_RAILS == "1.2"了啊

$RQUERYPAD_DEBUG = true 要写吗?写在什么地方?
5 楼 lllyq 2008-03-20  
有下划线的表示该连接使用inner join,后面的注释没有写的很清楚,我会补上去
4 楼 shanghaichris 2008-03-20  
示例当中的:@users = User.find(:all, :conditions => ["threads_.replies.title = ?", 
"rquerypad"]) 
当中的threads_这个下划线是不是多打了,笔误?
3 楼 lllyq 2008-03-20  
装好plugin,如果是rails 2.0直接就可以用了

如果是rails 1.2 需要在environment里设置一个$RQUERYPAD_RAILS = "1.2" ,而且只支持2.0推荐的方式查询,例如find(:all)而不能用find_all(这个在2.0已经被删除了,谢谢Quake帮助测试)

另外好消息是,今天在https://rubyforge.org/上首页新闻推荐了rquerypad
2 楼 sun201200204 2008-03-20  
强啊
不过怎么添加到自己的项目中中的model和controller中用呢
1 楼 QuakeWang 2008-03-19  
这东西很棒!这样就可以像hibernate那样写关联查询语句,不需要手动指明join了。

相关推荐

    SVN关联VS的插件

    SVN关联vs插件SVN关联vs插件SVN关联vs插件SVN关联vs插件SVN关联vs插件SVN关联vs插件SVN关联vs插件

    mybatis_xml关联插件

    Mybatis 是一个流行的Java持久层框架,它简化了数据库操作,允许开发者将SQL语句直接写在XML映射文件中,提供了动态SQL的功能。在Eclipse这样的集成开发环境中,为了提高开发效率,我们可以配置Mybatis的插件,使得...

    帆软报表查询性能sql分析插件

    帆软报表查询性能SQL分析插件是一款专门针对帆软报表系统的增强工具,旨在提升报表查询效率和性能优化。此插件能够深入解析SQL查询过程,帮助用户识别并解决潜在的性能瓶颈,确保报表的快速准确生成。以下是关于这款...

    完美解决MybatisPlus插件分页查询不起作用总是查询全部数据问题

    问题在于,当你在使用MybatisPlus进行分页查询时,如果未正确配置PaginationInterceptor,分页参数将无法生效,你会观察到所有的数据都被查询出来。要解决这个问题,你需要在你的项目配置中添加...

    burp插件分享:图形化版的重算sign和参数加解密插件1

    总的来说,这款图形化版的重算 sign 和参数加解密插件是 Burp Suite 的强大扩展,它提高了渗透测试的效率,简化了加密和签名处理的复杂度,尤其在处理加密请求和签名验证时,提供了极大的便利。无论是在日常的安全...

    opencart简化注册插件

    "Registration_simpleregistration.xml" 这个文件是插件的核心配置文件,通常以 XML 格式存储插件的元数据、安装信息以及具体的设置选项。当将此插件上传到 OpenCart 系统后,系统会解析这个 XML 文件来识别和安装...

    Twitter bootstrap模糊查询插件

    在IT行业中,Bootstrap是一款非常流行...总之,Twitter Bootstrap模糊查询插件是构建现代Web应用时增强搜索功能的有效工具,通过简单的API和丰富的定制选项,能够帮助开发者快速实现智能搜索功能,提升用户的交互体验。

    基于Solr的多表join查询加速方法

    在处理多表join查询时,传统的关系型数据库如MySQL等通常能很好地应对,但Solr作为一个非关系型的搜索引擎,其原生功能并不支持复杂的数据关联操作。本文将围绕"基于Solr的多表join查询加速方法"这一主题,深入探讨...

    Mybatis插件下 的分页查询

    在实际开发中,PageHelper的使用大大简化了分页查询的实现,避免了手动处理分页逻辑的繁琐,提高了代码的可读性和维护性。通过合理配置和使用PageHelper,可以有效优化SSM框架下的数据库查询性能,提升整体应用的...

    SuperMap iDesktop 扩展插件开发 - 查询重叠点线面

    **SuperMap iDesktop 扩展插件开发:查询重叠点线面** SuperMap iDesktop 是一款强大的桌面GIS(地理信息系统)软件,它提供了一系列工具和技术用于地理数据的创建、编辑、管理和分析。本插件专注于一个特定的地理...

    很强大的jsp手写分页插件 实现json 等一些ajax技术 联合查询 模糊查询 条件查询

    同时,它提供了联合查询、模糊查询和条件查询的能力,增强了数据检索的灵活性和实用性。 【知识点详解】: 1. **jsp分页**:在Web开发中,当数据量较大时,分页是必不可少的功能,可以提高用户体验并减轻服务器...

    ECSHOP 支持2.72和2.73订单查询插件

    这个"2.72和2.73订单查询插件"是专门为ECSHOP 2.72和2.73版本设计的,旨在增强系统的订单管理功能,特别是提升了用户体验。 首先,我们要理解这个插件的核心功能——订单查询。在标准的ECSHOP系统中,用户通常需要...

    雨滴网易云音乐插件(rainmeter网易云音乐插件)

    "雨滴网易云音乐插件(Rainmeter网易云音乐插件)"是一个为Windows操作系统设计的桌面美化工具,它能够将网易云音乐嵌入到用户的桌面背景中,提供一种独特的音乐播放体验。这款插件是基于Rainmeter软件开发的,...

    CAD和UG链轮插件,链轮计算软件.

    此外,插件可能还提供了一些自动化功能,如自动生成齿廓、计算静态和动态载荷、分析应力分布等,大大简化了链轮设计过程。 UG,作为一款高端的三维建模软件,同样拥有强大的链轮设计能力。UG的链轮插件可能包含了一...

    ECSHOP快递查询插件

    它不仅简化了商家跟踪包裹的工作,也使得消费者无需离开店铺就能获取到最新的物流动态,增强了购物的便捷性。同时,通过插件的使用,商家还可以收集到物流数据,分析配送效率,优化库存管理和物流策略,进一步提升...

    3dmax插件 物体批量替换.替换关联想要的物体

    3dmax插件 物体批量替换.替换关联想要的物体

    jQuery弹出层插件简化版

    《jQuery弹出层插件简化版详解》 在Web开发中,弹出层(也称为模态窗口)是一种常见的交互设计元素,它用于在用户与主页面交互的同时提供额外的信息或者功能。jQuery作为一款强大的JavaScript库,为创建弹出层提供...

    在Excel中添加宏,进行水和水蒸气参数的查询

    总的来说,使用Excel宏进行水和水蒸气参数查询是一个高效且灵活的方法,能够节省大量手动查找和计算的时间。通过理解VBA和宏的工作原理,用户可以进一步定制和优化查询功能,以满足特定的工程需求。

Global site tag (gtag.js) - Google Analytics