| rev | line source | 
| jbe/bsw@0 | 1 #!/usr/bin/env lua | 
| jbe@64 | 2 mondelefant = require("mondelefant") | 
| jbe/bsw@0 | 3 | 
| jbe/bsw@0 | 4 -- Standarddatenbankverbindung ist globale Variable 'db' | 
| jbe/bsw@0 | 5 function mondelefant.class_prototype:get_db_conn() return db end | 
| jbe/bsw@0 | 6 | 
| jbe/bsw@0 | 7 -- Verbindung aufbauen | 
| jbe/bsw@0 | 8 db = assert(mondelefant.connect{engine='postgresql', dbname='test'}) | 
| jbe/bsw@0 | 9 | 
| jbe/bsw@0 | 10 Product = mondelefant.new_class{ table = "product" } | 
| jbe/bsw@0 | 11 ProductVariant = mondelefant.new_class{ table = "product_variant" } | 
| jbe/bsw@0 | 12 | 
| jbe/bsw@0 | 13 Product:add_reference{ | 
| jbe/bsw@0 | 14   mode     = "1m", | 
| jbe/bsw@0 | 15   to       = ProductVariant, | 
| jbe/bsw@0 | 16   this_key = "number", | 
| jbe/bsw@0 | 17   that_key = "product_number", | 
| jbe/bsw@0 | 18   ref      = "product_variants", | 
| jbe/bsw@0 | 19   back_ref = "product", | 
| jbe/bsw@0 | 20   --default_order = '"number"' | 
| jbe/bsw@0 | 21 } | 
| jbe/bsw@0 | 22 | 
| jbe/bsw@0 | 23 ProductVariant:add_reference{ | 
| jbe/bsw@0 | 24   mode     = "m1", | 
| jbe/bsw@0 | 25   to       = Product, | 
| jbe/bsw@0 | 26   this_key = "product_number", | 
| jbe/bsw@0 | 27   that_key = "number", | 
| jbe/bsw@0 | 28   ref      = "product", | 
| jbe/bsw@0 | 29   back_ref = nil, | 
| jbe/bsw@0 | 30   --default_order = '"id"' | 
| jbe/bsw@0 | 31 } | 
| jbe/bsw@0 | 32 | 
| jbe/bsw@0 | 33 p = Product:new_selector():single_object_mode():add_where{"name=?", "Noodles"}:exec() | 
| jbe/bsw@0 | 34 | 
| jbe/bsw@0 | 35 | 
| jbe/bsw@0 | 36 --[[ | 
| jbe/bsw@0 | 37 -- Neue Datenbankklasse definieren | 
| jbe/bsw@0 | 38 Product = mondelefant.new_class{ table = '"product"' } | 
| jbe/bsw@0 | 39 | 
| jbe/bsw@0 | 40 -- Methode der Klasse, um sofort eine alphabetische Liste aller Produkte | 
| jbe/bsw@0 | 41 -- zu bekommen | 
| jbe/bsw@0 | 42 function Product:get_all_ordered_by_name() | 
| jbe/bsw@0 | 43   local selector = self:new_selector() | 
| jbe/bsw@0 | 44   selector:add_order_by('"name"') | 
| jbe/bsw@0 | 45   selector:add_order_by('"id"') | 
| jbe/bsw@0 | 46   return selector:exec() | 
| jbe/bsw@0 | 47 end | 
| jbe/bsw@0 | 48 | 
| jbe/bsw@0 | 49 function Product.object_get:name_length(key) | 
| jbe/bsw@0 | 50   local value = #self.name | 
| jbe/bsw@0 | 51   self._data.name_length = value | 
| jbe/bsw@0 | 52   return value | 
| jbe/bsw@0 | 53 end | 
| jbe/bsw@0 | 54 | 
| jbe/bsw@0 | 55 function Product.object_set:quality(value) | 
| jbe/bsw@0 | 56   if value == "perfect" or value == "good" or value == "trash" then | 
| jbe/bsw@0 | 57     self._data.quality = value | 
| jbe/bsw@0 | 58   else | 
| jbe/bsw@0 | 59     self._data.quality = nil | 
| jbe/bsw@0 | 60   end | 
| jbe/bsw@0 | 61   self._dirty.quality = true | 
| jbe/bsw@0 | 62 end | 
| jbe/bsw@0 | 63 | 
| jbe/bsw@0 | 64 -- Methode der Listen, um sie auszugeben | 
| jbe/bsw@0 | 65 function Product.list:print() | 
| jbe/bsw@0 | 66   for i, product in ipairs(self) do | 
| jbe/bsw@0 | 67     print(product.id, product.name, product.name_length) | 
| jbe/bsw@0 | 68   end | 
| jbe/bsw@0 | 69 end | 
| jbe/bsw@0 | 70 | 
| jbe/bsw@0 | 71 products = Product:get_all_ordered_by_name() | 
| jbe/bsw@0 | 72 products:print() | 
| jbe/bsw@0 | 73 products[1].quality = "perfect" | 
| jbe/bsw@0 | 74 print(products[1].quality) | 
| jbe/bsw@0 | 75 products[2].quality = "I don't know." | 
| jbe/bsw@0 | 76 print(products[2].quality) | 
| jbe/bsw@0 | 77 products[3].name = "Produkt Eins!" | 
| jbe/bsw@0 | 78 products[3].quality = "perfect" | 
| jbe/bsw@0 | 79 products[3]:save() | 
| jbe/bsw@0 | 80 | 
| jbe/bsw@0 | 81 sel = db:new_selector() | 
| jbe/bsw@0 | 82 sel:from('"product_variant"') | 
| jbe/bsw@0 | 83 sel:add_field("*") | 
| jbe/bsw@0 | 84 sel:attach("m1", products, "product_id", "id", "product", "product_variants") | 
| jbe/bsw@0 | 85 product_variants = sel:exec() | 
| jbe@64 | 86 --]] |