jbe/bsw@0: --[[-- jbe/bsw@0: param.update( jbe/bsw@0: record, -- database record to be updated jbe/bsw@0: key_and_field_name1, -- name of CGI parameter and record field jbe/bsw@0: key_and_field_name2, -- another name of a CGI parameter and record field jbe/bsw@0: { jbe/bsw@0: key3, -- name of CGI parameter jbe/bsw@0: field_name3 -- name of record field jbe/bsw@0: } jbe/bsw@0: ) jbe/bsw@0: jbe/bsw@0: This function can update several fields of a database record using GET/POST request parameters (or internal/exchanged parameters). The type of each parameter is automatically determined by the class of the record (_class:get_colums()[field].type). jbe/bsw@0: --]]-- jbe/bsw@0: jbe/bsw@0: function param.update(record, mapping_info, ...) jbe/bsw@0: if not mapping_info then jbe/bsw@0: return jbe/bsw@0: end jbe/bsw@0: assert(record, "No record given for param.update(...).") jbe/bsw@0: assert(record._class, "Record passed to param.update(...) has no _class attribute.") jbe/bsw@0: local key, field_name jbe/bsw@0: if type(mapping_info) == "string" then jbe/bsw@0: key = mapping_info jbe/bsw@0: field_name = mapping_info jbe/bsw@0: else jbe/bsw@0: key = mapping_info[1] jbe/bsw@0: field_name = mapping_info[2] jbe/bsw@0: end jbe/bsw@0: assert(key, "No key given in parameter of param.update(...).") jbe/bsw@0: assert(field_name, "No field name given in parameter of param.update(...).") jbe/bsw@0: local column_info = record._class:get_columns()[field_name] jbe/bsw@0: if not column_info then jbe/bsw@0: error('Type of column "' .. field_name .. '" is unknown.') jbe/bsw@0: end jbe/bsw@0: local new_value = param.get(key, column_info.type) jbe/bsw@0: if new_value ~= record[field_name] then jbe/bsw@0: record[field_name] = new_value jbe/bsw@0: end jbe/bsw@0: return param.update(record, ...) -- recursivly process following arguments jbe/bsw@0: end