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 --]]
|