<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Jaros&#322;aw Zabie&#322;&#322;o - BLOG: Ma&#322;y przegl&#261;d ORM'&#243;w dla Rubiego</title>
    <link>http://blog.zabiello.com/articles/2007/11/08/rails-orms</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>moje notatki, linki, komentarze</description>
    <item>
      <title>Ma&#322;y przegl&#261;d ORM'&#243;w dla Rubiego</title>
      <description>&lt;p&gt;Wcze&#347;niej pisa&#322;em o &lt;a href="http://blog.zabiello.com/articles/2007/03/22/rails-templates"&gt;dost&#281;pnych bibliotekach&lt;/a&gt; implementuj&#261;cych warstw&#281; Widoku z modelu &lt;a href="http://blog.zabiello.com/articles/2007/01/03/templates-and-mvc"&gt;&lt;span class="caps"&gt;MVC&lt;/span&gt;&lt;/a&gt; dla Ruby on Rails. Teraz kr&#243;tko o &lt;a href="http://pl.wikipedia.org/wiki/ORM"&gt;&lt;span class="caps"&gt;ORM&lt;/span&gt;&amp;#8217;ach&lt;/a&gt;. Jest ich ju&#380; kilka.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://ar.rubyonrails.com/"&gt;&lt;strong&gt;Active Record&lt;/strong&gt;&lt;/a&gt; &amp;#8211; podstawowy &lt;span class="caps"&gt;ORM&lt;/span&gt; u&#380;ywany we frameworku &lt;a href="http://rubyonrails.org"&gt;Ruby on Rails&lt;/a&gt;. Dosy&#263; prosty, ma &#322;adne walidacje, wywo&#322;ania zwrotne (callback), obs&#322;uguje relacje mi&#281;dzy tabelami. Wad&#261; jest stosunkowo s&#322;aba implementacja. Kod jest wci&#261;&#380; ma&#322;o zoptymalizowany wydajno&#347;ciowo i pod k&#261;tem zu&#380;ycia pami&#281;ci. Brakuje wci&#261;&#380; parametryzowanych wywo&#322;a&#324; &lt;span class="caps"&gt;SQL&lt;/span&gt;&amp;#8217;a, iterator&#243;w zamiast zwracania listy obiekt&#243;w, pr&#243;ba aktualizacji jednej kolumny w tabeli powoduje aktualizacj&#281; wszystkich p&#243;l rekordu. U&#380;ycie &lt;span class="caps"&gt;LEFT JOIN&lt;/span&gt;&amp;#8217;&#243;w zapomoc&#261; :include powoduje &#380;e nie dzia&#322;a :select (zwracane s&#261; wszystkie pola). Moim zdaniem, jest tu sporo do poprawienia.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://code.google.com/p/ruby-sequel/"&gt;&lt;strong&gt;Sequel&lt;/strong&gt;&lt;/a&gt; &amp;#8211; lekki &lt;span class="caps"&gt;ORM&lt;/span&gt; przypominaj&#261;cy sk&#322;adnikowo ten, stosowany w Django. W efekcie jest troch&#281; bardziej obiektowy ni&#380; Active Record. Mniej brutalnych wstawek czystego &lt;span class="caps"&gt;SQL&lt;/span&gt;&amp;#8217;a jak to jest w Active Record. Zostawiam sobie go na p&#243;&#380;niej do zbadania. Mo&#380;liwy konkurent dla Data Mappera (o kt&#243;rym ni&#380;ej)&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.nitroproject.org/"&gt;&lt;strong&gt;OG&lt;/strong&gt;&lt;/a&gt; &amp;#8211; &lt;span class="caps"&gt;ORM&lt;/span&gt; u&#380;ywany w alternatywnym do Rails&#243;w frameworku Rubiego &amp;#8211; Nitro. Nie s&#322;ysza&#322;em aby kto&#347; u&#380;ywa&#322; go poza tym frameworkiem. Podobno s&#261; zwolennicy Nitro. Ale na razie nie spotka&#322;em si&#281; z przekonuj&#261;cymi argumentami o wy&#380;szo&#347;ci Nitro nad Rails.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://ibatis.apache.org/docs/ruby/"&gt;&lt;strong&gt;RBatis&lt;/strong&gt;&lt;/a&gt; &amp;#8211; port javowego iBatis napisany w Ruby. Teoretycznie wepnie si&#281; w dowoln&#261; struktur&#281;, bo jest oparty na czystym &lt;span class="caps"&gt;SQL&lt;/span&gt;. Tzn. pozwala na odpowiednie zamapowanie tabel i ich p&#243;l na obiekty Rubiego. Co ciekawe, pozwala omin&#261;&#263; niewygodne nazwy p&#243;l tak, aby z poziomu obiektu Rubiego u&#380;ywa&#263; innej nazwy kolumny ni&#380; wyst&#281;puje w tabeli. Trudno mi co&#347; powiedzie&#263; o dojrza&#322;o&#347;ci tego projektu, ale chyba rozwija si&#281; dosy&#263; powoli. Troch&#281; mnie odepchn&#281;&#322;a informacja o tym, &#380;e wci&#261;&#380; nie ma zaimplementowanych join&#243;w.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://datamapper.org/why.html"&gt;&lt;strong&gt;Data Mapper&lt;/strong&gt;&lt;/a&gt; &amp;#8211; na razie chyba najbardziej obiecuj&#261;cy &lt;span class="caps"&gt;ORM&lt;/span&gt; ktory mo&#380;na wpi&#261;&#263; w Rails zamiast/obok Active Record. Jest du&#380;o szybszy, bo lepiej zoptymalizowano budowanie zapyta&#324;. Posiada &#322;adniejsz&#261;, bardziej obiektow&#261; sk&#322;adni&#281; ni&#380; Active Record. Zreszt&#261; sami zobaczcie:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="constant"&gt;Zoo&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;all&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;Dallas&lt;/span&gt;&lt;span class="punct"&gt;')&lt;/span&gt;

&lt;span class="comment"&gt;# odpowiednik dla&lt;/span&gt;

&lt;span class="constant"&gt;Zoo&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;find&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:all&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:conditions&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;['&lt;/span&gt;&lt;span class="string"&gt;name = ?&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;Dallas&lt;/span&gt;&lt;span class="punct"&gt;']).&lt;/span&gt; 

&lt;span class="comment"&gt;# 'gt' znaczy wi&#281;kszy-ni&#380;. Istnieje r&#243;wnie&#380; 'lt' (mniejszy-ni&#380;)&lt;/span&gt;
&lt;span class="ident"&gt;Person&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;all&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:age&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;gt&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;30&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;

&lt;span class="comment"&gt;# 'gte' znaczy wi&#281;kszy-lub-r&#243;wny-ni&#380;. Jest te&#380; 'lte'.&lt;/span&gt;
&lt;span class="constant"&gt;Person&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;all&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:age&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;gte&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;30&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;

&lt;span class="constant"&gt;Person&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;all&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:name&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;not&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;bob&lt;/span&gt;&lt;span class="punct"&gt;')&lt;/span&gt;

&lt;span class="comment"&gt;# Je&#347;li warto&#347;ci&#261; w parze jest Arar, to generowany jest sql'owy warunek IN()&lt;/span&gt;
&lt;span class="constant"&gt;Person&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;all&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:name&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;like&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;S%&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="symbol"&gt;:id&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="number"&gt;1&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;2&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;3&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;4&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="number"&gt;5&lt;/span&gt;&lt;span class="punct"&gt;])&lt;/span&gt;

&lt;span class="comment"&gt;# To samo co Zoo.first(...)&lt;/span&gt;
&lt;span class="constant"&gt;Zoo&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;Ft. Worth&lt;/span&gt;&lt;span class="punct"&gt;']&lt;/span&gt;

&lt;span class="comment"&gt;# To samo co Zoo.find(11)&lt;/span&gt;
&lt;span class="constant"&gt;Zoo&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="number"&gt;11&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt;

&lt;span class="comment"&gt;# Przyk&#322;ad zwrotu NOT IN ().&lt;/span&gt;
&lt;span class="constant"&gt;Person&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;all&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:name&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;not&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;['&lt;/span&gt;&lt;span class="string"&gt;bob&lt;/span&gt;&lt;span class="punct"&gt;','&lt;/span&gt;&lt;span class="string"&gt;rick&lt;/span&gt;&lt;span class="punct"&gt;','&lt;/span&gt;&lt;span class="string"&gt;steve&lt;/span&gt;&lt;span class="punct"&gt;'])&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Poza tym Data Mapper jest wielow&#261;tkowy i domy&#347;lnie u&#380;ywa &lt;span class="caps"&gt;LEFT JOIN&lt;/span&gt;&amp;#8217;&#243;w w wypadku u&#380;ycia relacji. Przeciwnie do Active Record, kt&#243;ry nie jest odporny na w&#261;tki i wymaga jawnego u&#380;ycia parametru :include aby w&#322;&#261;czy&#322; joiny (przy okazji likwiduj&#261;c dzia&#322;anie parametru :select).&lt;/p&gt;


	&lt;p&gt;(UPDATED 2007-12-16) Pod JRuby mo&#380;na odpala&#263; &lt;strong&gt;&lt;code&gt;Active Record JDBC&lt;/code&gt;&lt;/strong&gt; (zobacz list&#281; gem&#243;w: gem search -r ActiveRecord) oraz &lt;a href="http://code.google.com/p/activehibernate/"&gt;&lt;strong&gt;Active Hibernate&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Thu, 08 Nov 2007 00:16:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:06153712-0aba-44fc-bb16-55d2a8c99078</guid>
      <author>Jaros&#322;aw Zabie&#322;&#322;o</author>
      <link>http://blog.zabiello.com/articles/2007/11/08/rails-orms</link>
      <category>orm</category>
      <category>rails</category>
      <category>ruby</category>
    </item>
    <item>
      <title>"Ma&#322;y przegl&#261;d ORM'&#243;w dla Rubiego" by tusla</title>
      <description>&lt;p&gt;czesc
&lt;br /&gt; 
W komentarzach tego artykulu jest kilka informacji (testy) o bazie Durus &lt;a href="http://pyinsci.blogspot.com/2007/07/fastest-python-database-interface.html" rel="nofollow"&gt;fastest python database interface&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;
pozdrawiam&lt;/p&gt;</description>
      <pubDate>Tue, 27 Nov 2007 21:22:04 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:71a3460a-9306-4285-a3d9-2dc1ce9c2e6d</guid>
      <link>http://blog.zabiello.com/articles/2007/11/08/rails-orms#comment-1251</link>
    </item>
    <item>
      <title>"Ma&#322;y przegl&#261;d ORM'&#243;w dla Rubiego" by aseeon</title>
      <description>&lt;p&gt;Mo&#380;e odrobin&#281; off topicowo, ale powstaje nowy framework dla rubiego: Merb
&lt;a href="http://merbivore.com/" rel="nofollow"&gt;http://merbivore.com/&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Pachnie mi odpowiednikiem pylonsa w ruby.
Pozwala na bardzo &#322;atwo zmian&#281; pomi&#281;dzy ORM&amp;#8217;a, bibliotek JS czy te&#380; silnika templet&#243;w&lt;/p&gt;</description>
      <pubDate>Fri, 23 Nov 2007 11:44:19 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:b4acc1cb-8535-4be6-96d1-1a27bc47437f</guid>
      <link>http://blog.zabiello.com/articles/2007/11/08/rails-orms#comment-1244</link>
    </item>
    <item>
      <title>"Ma&#322;y przegl&#261;d ORM'&#243;w dla Rubiego" by rsz</title>
      <description>&lt;p&gt;yyy, wielow&#261;tkowy? czy to znaczy, &#380;e wreszcie b&#281;d&#281; m&#243;g&#322; przyspieszy&#263; dzia&#322;anie moich aplikacji na moim Core 2 Duo T7200 co to dwa rdzenie ma? ;D&lt;/p&gt;</description>
      <pubDate>Sun, 11 Nov 2007 00:14:49 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:c617b05b-249e-4cf0-b3fd-ae279c0118ef</guid>
      <link>http://blog.zabiello.com/articles/2007/11/08/rails-orms#comment-1221</link>
    </item>
    <item>
      <title>"Ma&#322;y przegl&#261;d ORM'&#243;w dla Rubiego" by lopex</title>
      <description>&lt;p&gt;P&#243;jdzie, tylko przed kolejn&#261; wersj&#261; kompilatora trzeba korzysta&#263; z POJO (chyba &#380;e IRubyObject rozszerza&#322;by Serializable)&lt;/p&gt;


	&lt;p&gt;TestObject to jest klasa javowa z polem String:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;require 'db4o-6.3-java5.jar'
include Java

db = com.db4o.Db4o.open_file(&amp;quot;DATABASE_FILE&amp;quot;)

TestObject = cos.tam.TestObject
o = TestObject.new
o.str = &amp;quot;blah&amp;quot;
db.set(o)

db.query(TestObject.java_class).each do |e|
    puts e.str
end&lt;/code&gt;&lt;/pre&gt;</description>
      <pubDate>Fri, 09 Nov 2007 13:26:41 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:4e21a19d-423f-4c16-b0e4-1d10d58b20a9</guid>
      <link>http://blog.zabiello.com/articles/2007/11/08/rails-orms#comment-1217</link>
    </item>
    <item>
      <title>"Ma&#322;y przegl&#261;d ORM'&#243;w dla Rubiego" by Jaros&#322;aw Zabie&#322;&#322;o</title>
      <description>&lt;p&gt;qertoip: a wiesz, &#380;e mo&#380;e i masz racj&#281;? :) Planowa&#322;em jedn&#261; aplikacj&#281; napisa&#263; w Pylons i SQLAlchemy ale by&#263; mo&#380;e napisz&#281; j&#261; w Pylons i&amp;#8230; &lt;a href="http://wiki.zope.org/ZODB/FrontPage" rel="nofollow"&gt;ZODB&lt;/a&gt;. BTW, poza ZODB jest jeszcze jedna (te&#380; w Pythonie) &amp;#8211;  &lt;a href="http://www.mems-exchange.org/software/durus/" rel="nofollow"&gt;Durus&lt;/a&gt;. Nie u&#380;ywa&#322;em, ale chyba jest prostsza. Acha, i jest przecie&#380;, napisana w Javie &amp;#8211; &lt;a href="http://en.wikipedia.org/wiki/Db4o" rel="nofollow"&gt;DB4O Object Database&lt;/a&gt;. Mo&#380;e to by posz&#322;o na JRuby?&lt;/p&gt;</description>
      <pubDate>Fri, 09 Nov 2007 04:28:13 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:70d0e1b5-c699-41e7-bf48-632c3a02aa69</guid>
      <link>http://blog.zabiello.com/articles/2007/11/08/rails-orms#comment-1214</link>
    </item>
    <item>
      <title>"Ma&#322;y przegl&#261;d ORM'&#243;w dla Rubiego" by qertoip</title>
      <description>&lt;p&gt;Najwy&#380;sza pora porzuci&#263; ORM-y. Spo&#322;eczno&#347;&#263; powinna skoncentrowa&#263; si&#281; na stworzeniu produkcyjnej, czysto obiektowej bazy danych dla Rubiego. Odpowiednika Pythonowego ZODB. Wierz&#281;, &#380;e na tym b&#281;dzie polega&#322;a nast&#281;pna rewolucja we frameworkach &amp;#8211; masowe wykorzystanie obiektowych baz danych w ma&#322;ych i &#347;rednich aplikacjach webowych.&lt;/p&gt;</description>
      <pubDate>Thu, 08 Nov 2007 22:32:42 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:96d41b8f-3e79-4cea-a7d5-396991a8b74f</guid>
      <link>http://blog.zabiello.com/articles/2007/11/08/rails-orms#comment-1212</link>
    </item>
    <item>
      <title>"Ma&#322;y przegl&#261;d ORM'&#243;w dla Rubiego" by szeryf</title>
      <description>&lt;p&gt;Z tego co pami&#281;tam aktualizowanie wszystkich p&#243;l podczas update&amp;#8217;u w AR jest &amp;#8220;by design&amp;#8221;. Chodzi o to, &#380;eby dwa r&#243;&#380;ne w&#261;tki aplikacji, update&amp;#8217;uj&#261;c pojedy&#324;cze pola nie spowodowa&#322;y, &#380;e w zapisany w bazie danych rekord nie b&#281;dzie spe&#322;nia&#322; regu&#322; walidacji.&lt;/p&gt;


	&lt;p&gt;Poza tym wydaje mi si&#281;, &#380;e update pojedy&#324;czego pola a update wszystkich p&#243;l to nie jest du&#380;a r&#243;&#380;nica dla bazy. Ale nigdy nie pr&#243;bowa&#322;em tego zmierzy&#263;, wi&#281;c mo&#380;e si&#281; myl&#281;.&lt;/p&gt;</description>
      <pubDate>Thu, 08 Nov 2007 20:10:49 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:6b4e02f0-3cf3-43bd-abe1-fda29309ba5c</guid>
      <link>http://blog.zabiello.com/articles/2007/11/08/rails-orms#comment-1210</link>
    </item>
    <item>
      <title>"Ma&#322;y przegl&#261;d ORM'&#243;w dla Rubiego" by lopex</title>
      <description>&lt;p&gt;Mo&#380;e to nie orm ale na najbardziej wypasione zapytania pozwala Ambition: &lt;a href="http://errtheblog.com/post/10722" rel="nofollow"&gt;http://errtheblog.com/post/10722&lt;/a&gt;.
Ambition je&#378;dzi bezpo&#347;rednio po AST i nie wymaga aby konstrukcje mia&#322;y &amp;#8220;semantyczny&amp;#8221; sens w Rubym.&lt;/p&gt;</description>
      <pubDate>Thu, 08 Nov 2007 18:34:13 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:a6598d15-8d23-42d6-8e0b-b6f32af36db5</guid>
      <link>http://blog.zabiello.com/articles/2007/11/08/rails-orms#comment-1209</link>
    </item>
    <item>
      <title>"Ma&#322;y przegl&#261;d ORM'&#243;w dla Rubiego" by Jaros&#322;aw Zabie&#322;&#322;o</title>
      <description>&lt;p&gt;climbus: SA mo&#380;e i rz&#261;dzi ale w innym miejcu, nie w Ruby.&lt;/p&gt;


	&lt;p&gt;Pawe&#322; Kondzior: DM jest w niekt&#243;rych miejscach wolniejszy, pisz&#261; o tym na stronie, wci&#261;&#380; trwaj&#261; prace nad optymalizacj&#261; kodu. Z tego co pisz&#261;, zmiana zawarto&#347;ci kolumny nie poci&#261;ga konieczno&#347;ci zmian wszystkich kolumn w rekordzie tak jak w AR. Z tymi relacjami, to jest opcjonalny parametr :lazy. Je&#347;li jest true, wtedy pole takie odpala dodatkow&#261; kwerend&#281; w momencie pr&#243;by dostania si&#281; do niego. Je&#347;li jest false, to nic nie jest wykonywane, bo DM domy&#347;lnie w&#322;&#261;cza LEFT JOIN&amp;#8217;y je&#347;li s&#261; relacje. W AR trzeba to jawnie zapoda&#263; za pomoc&#261; :select. Tu jest to domy&#347;lnie w&#322;&#261;czone.&lt;/p&gt;</description>
      <pubDate>Thu, 08 Nov 2007 13:15:33 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:45b4190d-80ed-41c0-a2d6-b7c2d4c280c3</guid>
      <link>http://blog.zabiello.com/articles/2007/11/08/rails-orms#comment-1207</link>
    </item>
    <item>
      <title>"Ma&#322;y przegl&#261;d ORM'&#243;w dla Rubiego" by climbus</title>
      <description>&lt;p&gt;I tak sqlalchemy rz&#261;dzi :)&lt;/p&gt;</description>
      <pubDate>Thu, 08 Nov 2007 12:57:33 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:c5dc54ad-f8cf-452d-83f6-dd00d412d97f</guid>
      <link>http://blog.zabiello.com/articles/2007/11/08/rails-orms#comment-1206</link>
    </item>
    <item>
      <title>"Ma&#322;y przegl&#261;d ORM'&#243;w dla Rubiego" by Piotr Usewicz</title>
      <description>&lt;p&gt;No calkiem fajny ten DataMapper. Nie da sie ukry&#263;. Czesc Pawel ;]&lt;/p&gt;</description>
      <pubDate>Thu, 08 Nov 2007 11:57:14 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:1cc54a46-0cb4-4c35-a864-015cebf31678</guid>
      <link>http://blog.zabiello.com/articles/2007/11/08/rails-orms#comment-1205</link>
    </item>
    <item>
      <title>"Ma&#322;y przegl&#261;d ORM'&#243;w dla Rubiego" by Pawe&#322; Kondzior</title>
      <description>&lt;p&gt;&lt;a href="http://pastie.caboo.se/pastes/109878" rel="nofollow"&gt;http://pastie.caboo.se/pastes/109878&lt;/a&gt; Takie male porownanie wydajnosci, znalecione na pastie. Wyglada na to ze DM nie zawsze jest szybszy od AR&lt;/p&gt;</description>
      <pubDate>Thu, 08 Nov 2007 11:21:48 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:3cfeaa74-01ac-4366-a174-d17706583eb9</guid>
      <link>http://blog.zabiello.com/articles/2007/11/08/rails-orms#comment-1204</link>
    </item>
    <item>
      <title>"Ma&#322;y przegl&#261;d ORM'&#243;w dla Rubiego" by Pawe&#322; Kondzior</title>
      <description>&lt;p&gt;Ale kaszana :( dobra tu jest kod z poprzedniego wpisu
&lt;a href="http://pastie.caboo.se/private/xntb4gs37nlzc10jbew" rel="nofollow"&gt;http://pastie.caboo.se/private/xntb4gs37nlzc10jbew&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 08 Nov 2007 10:40:45 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:d5f24cd1-7980-448e-b926-0347db3c0a1a</guid>
      <link>http://blog.zabiello.com/articles/2007/11/08/rails-orms#comment-1203</link>
    </item>
    <item>
      <title>"Ma&#322;y przegl&#261;d ORM'&#243;w dla Rubiego" by Pawe&#322; Kondzior</title>
      <description>&lt;p&gt;Aha, Jarku, jak to wyglada w przypadku DataMappera gdy zapisujemy cos do bazy ? Tak samo jak w AR ? wszystkie kolumny sa odswiezane ?&lt;/p&gt;


	&lt;p&gt;Kolejna kwestia to to czy jak zrobie relacje typu has_many, belongs_to i wywolam obiekt_a.obiekt_b.obiekt_a to zostana wywolane 2 zapytania dla obiektu_a ? czy obiekt_b bedzie posiadal referencje obiektu_a ?&lt;/p&gt;


	&lt;p&gt;No i czy tak jak w AR trzeba pilnowac sie przy wiekszych relacjach i uzywac self.reload po zmianiejakiegos foreign_key&amp;#8217;a dla obiektu, tak aby wywolanie relacji bylo zsynchronizowane ze zmiana klucza/jego usunieciem ?
Przyklad:&lt;/p&gt;


	&lt;p&gt;obiekt_a = Obiekt_a.find(:first, :include =&amp;gt; [:obiekt_b])
obiekt_a.obiekt_b_id = nil
puts obiekt_a.obiekt_b # zwroci obiekt_b
obiekt_a.reload
puts obiekt_a.obiekt_b # zwroci nil&lt;/p&gt;</description>
      <pubDate>Thu, 08 Nov 2007 10:39:10 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:4269a958-4723-4329-b39c-bac485a99741</guid>
      <link>http://blog.zabiello.com/articles/2007/11/08/rails-orms#comment-1202</link>
    </item>
    <item>
      <title>"Ma&#322;y przegl&#261;d ORM'&#243;w dla Rubiego" by Pawe&#322; Kondzior</title>
      <description>&lt;p&gt;Nie poprawili bo Rails 2.0 to PR dla tego calego RESTfulu, Rails 2.0 to glownie rozwoj calego ActionPack&amp;#8217;a, a szkoda. Trzeba bedzie sie zastanowic nad tym DataMapperem, wyglada obiecujaco. Ale to juz chyba tylko w nowych projektach :( stare zabardzo utkiwly w ActiveRecordzie&lt;/p&gt;</description>
      <pubDate>Thu, 08 Nov 2007 10:33:17 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:25180252-5511-41aa-9832-34836d17c544</guid>
      <link>http://blog.zabiello.com/articles/2007/11/08/rails-orms#comment-1201</link>
    </item>
    <item>
      <title>"Ma&#322;y przegl&#261;d ORM'&#243;w dla Rubiego" by wijet</title>
      <description>&lt;p&gt;Faktycznie AR ma sporo wad, ciekawe dlaczego w 2.0 praktycznie nic nie poprawili, a jakby nie patrze&#263; komunikacja z baza jest do&#347;&#263; wa&#380;nym elementem frameworka. Mo&#380;e czas rzuci&#263; okiem na Data Mappera.&lt;/p&gt;</description>
      <pubDate>Thu, 08 Nov 2007 02:51:41 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:15997252-7090-4b92-bb45-665a64d7b267</guid>
      <link>http://blog.zabiello.com/articles/2007/11/08/rails-orms#comment-1200</link>
    </item>
    <item>
      <title>"Ma&#322;y przegl&#261;d ORM'&#243;w dla Rubiego" by maniel</title>
      <description>&lt;p&gt;d&#380;iz, dobre pare sekund sie zastanawia&#322;em co to do cholery ten Arar :D&lt;/p&gt;</description>
      <pubDate>Thu, 08 Nov 2007 02:01:55 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:ee0dbfaf-c978-4bc9-acd9-bfe4bda900b3</guid>
      <link>http://blog.zabiello.com/articles/2007/11/08/rails-orms#comment-1199</link>
    </item>
  </channel>
</rss>
