Gesucht: Maschinen-freundlicher Condition Builder


#1

Ich suche ein Plugin/Gem, das aus einer Maschinen-freundlichen
Query-Spezifikation für AR#find die :condition- und :include-Parameter
baut. Es gibt eine übergroße Auswahl an Plugins, die dies aus einer
Menschen-freundlichen Repräsentation tun. Sieht alles schön aus, hilft
aber wenig dabei, eine Query-Spezifikation, die vom Client kommt, in
etwas AR-taugliches umzuwandeln.

Die genaue Form der Query-Spezifikation habe ich noch nicht festgelegt,
sie könnte aber so aussehen

[
{ :property => ‘lastname’, :operator => ‘=’, :target => ‘Schmidt’ },
{ :property => ‘children.firstname’, :operator => ‘LIKE’,
:target => 'P* },
{ :property => ‘children’, :aspect => ‘count’, :operator => ‘>’,
:target => 2 }
]

Das soll alle Leute finden, die mit Nachnamen ‘Schmidt’ heißen und mehr
als 2 Kinder haben, deren Vornamen mit ‘P’ beginnt.

In reinem ActiveRecord geschrieben, müßte das nur für die ersten beiden
Bedingungen aus dem Stehgreif so aussehen:

Person.find(:all, :include => :children,
:include => :children,
:conditions => [
“(lastname = ?) AND (firstname_children LIKE ?”,
‘Schmidt’, ‘P%’
]
)

Die dritte Bedingung läßt sich, glaube ich, gar nicht ohne beinahe
vollständig handgeschriebenes SQL ausdrücken, da :select ignoriert
wird, wenn :include vorkommt.

Ich überlege noch, ob die beste Lösung wäre, das Problem nach unten in
die Datenbank zu schieben und dort geeignete Views zu definieren. Das
würde die Kompexität für einen Query Builder deutlich verringern.

Ideen?

Michael


Michael S.
mailto:removed_email_address@domain.invalid
http://www.schuerig.de/michael/


#2

öhm wenn das so komplex ist, kannst du doch gleich sql erzeugen lassen
und mit find_sql arbeiten und musst nicht den umweg über AR nehmen…

gruß
manuel

Am 06.04.2009 um 21:43 schrieb Michael S.:


#3

On Monday 06 April 2009, Manuel W. wrote:

öhm wenn das so komplex ist, kannst du doch gleich sql erzeugen
lassen und mit find_sql arbeiten und musst nicht den umweg über AR
nehmen…

Das kommt aber vom UI. Wer soll da individuell das SQL für schreiben?

Michael


Michael S.
mailto:removed_email_address@domain.invalid
http://www.schuerig.de/michael/


#4

du kannst doch aus deiner eigenen query spezifikation:
[
{ :property => ‘lastname’, :operator => ‘=’, :target => ‘Schmidt’ },
{ :property => ‘children.firstname’, :operator => ‘LIKE’,
:target => 'P* },
{ :property => ‘children’, :aspect => ‘count’, :operator => ‘>’,
:target => 2 }
]

irgendwie sql bauen? oder verstehe ich hier was falsch?

gruß
manuel

Am 06.04.2009 um 23:30 schrieb Michael S.:


#5

On Monday 06 April 2009, Manuel W. wrote:

]

irgendwie sql bauen? oder verstehe ich hier was falsch?

Ja: Ich wollte mit meiner Frage herausfinden, ob mir schon jemand einen
Teil der Arbeit abgenommen hat.

Michael


Michael S.
mailto:removed_email_address@domain.invalid
http://www.schuerig.de/michael/