jbe/bsw@0: #!/usr/bin/env lua jbe@64: mondelefant = require("mondelefant") jbe/bsw@0: jbe/bsw@0: -- Standarddatenbankverbindung ist globale Variable 'db' jbe/bsw@0: function mondelefant.class_prototype:get_db_conn() return db end jbe/bsw@0: jbe/bsw@0: -- Verbindung aufbauen jbe/bsw@0: db = assert(mondelefant.connect{engine='postgresql', dbname='test'}) jbe/bsw@0: jbe/bsw@0: Product = mondelefant.new_class{ table = "product" } jbe/bsw@0: ProductVariant = mondelefant.new_class{ table = "product_variant" } jbe/bsw@0: jbe/bsw@0: Product:add_reference{ jbe/bsw@0: mode = "1m", jbe/bsw@0: to = ProductVariant, jbe/bsw@0: this_key = "number", jbe/bsw@0: that_key = "product_number", jbe/bsw@0: ref = "product_variants", jbe/bsw@0: back_ref = "product", jbe/bsw@0: --default_order = '"number"' jbe/bsw@0: } jbe/bsw@0: jbe/bsw@0: ProductVariant:add_reference{ jbe/bsw@0: mode = "m1", jbe/bsw@0: to = Product, jbe/bsw@0: this_key = "product_number", jbe/bsw@0: that_key = "number", jbe/bsw@0: ref = "product", jbe/bsw@0: back_ref = nil, jbe/bsw@0: --default_order = '"id"' jbe/bsw@0: } jbe/bsw@0: jbe/bsw@0: p = Product:new_selector():single_object_mode():add_where{"name=?", "Noodles"}:exec() jbe/bsw@0: jbe/bsw@0: jbe/bsw@0: --[[ jbe/bsw@0: -- Neue Datenbankklasse definieren jbe/bsw@0: Product = mondelefant.new_class{ table = '"product"' } jbe/bsw@0: jbe/bsw@0: -- Methode der Klasse, um sofort eine alphabetische Liste aller Produkte jbe/bsw@0: -- zu bekommen jbe/bsw@0: function Product:get_all_ordered_by_name() jbe/bsw@0: local selector = self:new_selector() jbe/bsw@0: selector:add_order_by('"name"') jbe/bsw@0: selector:add_order_by('"id"') jbe/bsw@0: return selector:exec() jbe/bsw@0: end jbe/bsw@0: jbe/bsw@0: function Product.object_get:name_length(key) jbe/bsw@0: local value = #self.name jbe/bsw@0: self._data.name_length = value jbe/bsw@0: return value jbe/bsw@0: end jbe/bsw@0: jbe/bsw@0: function Product.object_set:quality(value) jbe/bsw@0: if value == "perfect" or value == "good" or value == "trash" then jbe/bsw@0: self._data.quality = value jbe/bsw@0: else jbe/bsw@0: self._data.quality = nil jbe/bsw@0: end jbe/bsw@0: self._dirty.quality = true jbe/bsw@0: end jbe/bsw@0: jbe/bsw@0: -- Methode der Listen, um sie auszugeben jbe/bsw@0: function Product.list:print() jbe/bsw@0: for i, product in ipairs(self) do jbe/bsw@0: print(product.id, product.name, product.name_length) jbe/bsw@0: end jbe/bsw@0: end jbe/bsw@0: jbe/bsw@0: products = Product:get_all_ordered_by_name() jbe/bsw@0: products:print() jbe/bsw@0: products[1].quality = "perfect" jbe/bsw@0: print(products[1].quality) jbe/bsw@0: products[2].quality = "I don't know." jbe/bsw@0: print(products[2].quality) jbe/bsw@0: products[3].name = "Produkt Eins!" jbe/bsw@0: products[3].quality = "perfect" jbe/bsw@0: products[3]:save() jbe/bsw@0: jbe/bsw@0: sel = db:new_selector() jbe/bsw@0: sel:from('"product_variant"') jbe/bsw@0: sel:add_field("*") jbe/bsw@0: sel:attach("m1", products, "product_id", "id", "product", "product_variants") jbe/bsw@0: product_variants = sel:exec() jbe@64: --]]