<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://camnet.oetterer.eu/index.php?action=history&amp;feed=atom&amp;title=Modul%3ACargoUtil</id>
	<title>Modul:CargoUtil - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://camnet.oetterer.eu/index.php?action=history&amp;feed=atom&amp;title=Modul%3ACargoUtil"/>
	<link rel="alternate" type="text/html" href="https://camnet.oetterer.eu/index.php?title=Modul:CargoUtil&amp;action=history"/>
	<updated>2026-05-02T07:53:01Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in CamNet</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://camnet.oetterer.eu/index.php?title=Modul:CargoUtil&amp;diff=7035&amp;oldid=prev</id>
		<title>imported&gt;Oetterer: Schützte „Modul:CargoUtil“: Automatic protection of selected project pages ([Bearbeiten=Nur Administratoren erlauben] (unbeschränkt) [Verschieben=Nur Administratoren erlauben] (unbeschränkt))</title>
		<link rel="alternate" type="text/html" href="https://camnet.oetterer.eu/index.php?title=Modul:CargoUtil&amp;diff=7035&amp;oldid=prev"/>
		<updated>2022-10-07T15:56:04Z</updated>

		<summary type="html">&lt;p&gt;Schützte „&lt;a href=&quot;/Modul:CargoUtil&quot; title=&quot;Modul:CargoUtil&quot;&gt;Modul:CargoUtil&lt;/a&gt;“: Automatic protection of selected project pages ([Bearbeiten=Nur Administratoren erlauben] (unbeschränkt) [Verschieben=Nur Administratoren erlauben] (unbeschränkt))&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 7. Oktober 2022, 17:56 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;de&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(kein Unterschied)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>imported&gt;Oetterer</name></author>
	</entry>
	<entry>
		<id>https://camnet.oetterer.eu/index.php?title=Modul:CargoUtil&amp;diff=5682&amp;oldid=prev</id>
		<title>imported&gt;Oetterer am 11. März 2022 um 09:48 Uhr</title>
		<link rel="alternate" type="text/html" href="https://camnet.oetterer.eu/index.php?title=Modul:CargoUtil&amp;diff=5682&amp;oldid=prev"/>
		<updated>2022-03-11T09:48:56Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://camnet.oetterer.eu/index.php?title=Modul:CargoUtil&amp;amp;diff=5682&amp;amp;oldid=2614&quot;&gt;Änderungen zeigen&lt;/a&gt;</summary>
		<author><name>imported&gt;Oetterer</name></author>
	</entry>
	<entry>
		<id>https://camnet.oetterer.eu/index.php?title=Modul:CargoUtil&amp;diff=2614&amp;oldid=prev</id>
		<title>Noémi am 13. Februar 2016 um 22:36 Uhr</title>
		<link rel="alternate" type="text/html" href="https://camnet.oetterer.eu/index.php?title=Modul:CargoUtil&amp;diff=2614&amp;oldid=prev"/>
		<updated>2016-02-13T22:36:43Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 14. Februar 2016, 00:36 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l204&quot;&gt;Zeile 204:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 204:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	local ret = false&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	local ret = false&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if type(data) == &amp;quot;table&amp;quot; then&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if type(data) == &amp;quot;table&amp;quot; then&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		for k, v in pairs(data) do&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;			if type(v) == 'boolean' then&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;				data[k] = v and 1 or 0&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;			end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		local frame = mw.getCurrentFrame()&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		local frame = mw.getCurrentFrame()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		ret = frame:callParserFunction{name = '#cargo_store:_table=' .. dbtable, args = data}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		ret = frame:callParserFunction{name = '#cargo_store:_table=' .. dbtable, args = data}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Noémi</name></author>
	</entry>
	<entry>
		<id>https://camnet.oetterer.eu/index.php?title=Modul:CargoUtil&amp;diff=37&amp;oldid=prev</id>
		<title>mw&gt;Oetterer am 15. Januar 2016 um 22:35 Uhr</title>
		<link rel="alternate" type="text/html" href="https://camnet.oetterer.eu/index.php?title=Modul:CargoUtil&amp;diff=37&amp;oldid=prev"/>
		<updated>2016-01-15T22:35:18Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
local getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
local classDebug = require('Module:Debug/class')&lt;br /&gt;
local _TT = require('Module:TableTools')&lt;br /&gt;
&lt;br /&gt;
local cfg = {&lt;br /&gt;
	fieldSeparator = '###~~~@@@~~~###',&lt;br /&gt;
	helperTemplate = 'CargoUtilQueryParserHelper',&lt;br /&gt;
	resultSeparator = '#####~~~****~~~#####',&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.declare(dbtable, dbfields)&lt;br /&gt;
	classDebug:log(21, 'entering CargoUtil.declare', 'CargoUtil.declare')&lt;br /&gt;
	classDebug:log(22, ' with table &amp;quot;' .. dbtable .. '&amp;quot; and fields ' ..&lt;br /&gt;
		(type(dbfields) == &amp;quot;string&amp;quot; and '&amp;quot;' .. dbfields .. '&amp;quot;' or 'of type ' .. type(dbfields)), 'CargoUtil.declare')&lt;br /&gt;
	if type(dbfields) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		classDebug:log(23, ' datatable: ' .. _TT.printTable(dbfields), 'CargoUtil.declare')&lt;br /&gt;
	end&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	local ret = false&lt;br /&gt;
	if type(dbfields) == &amp;quot;string&amp;quot; then&lt;br /&gt;
		ret = frame:callParserFunction('#cargo_declare:_table=' .. dbtable, dbfields)&lt;br /&gt;
	elseif type(dbfields) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		ret = frame:callParserFunction{name = '#cargo_declare:_table=' .. dbtable, args = dbfields}&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.query(query, attributes, retainBlanks)&lt;br /&gt;
	classDebug:log(21, 'entering CargoUtil.query', 'CargoUtil.query')&lt;br /&gt;
	classDebug:log(23, ' with query: ' .. (query and _TT.printTable(query) or 'NONE'), 'CargoUtil.query')&lt;br /&gt;
	classDebug:log(23, ' with attributes: ' .. (attributes and _TT.printTable(attributes) or 'NONE'), 'CargoUtil.query')&lt;br /&gt;
	local attributes = attributes or {}&lt;br /&gt;
	if type(attributes) ~= 'table' then&lt;br /&gt;
		attributes = {attributes}&lt;br /&gt;
	end&lt;br /&gt;
	-- now try to ascertain the headline&lt;br /&gt;
	local tmpfields = query.fields&lt;br /&gt;
	local headlines = {}&lt;br /&gt;
	if type(tmpfields) ~= 'table' then&lt;br /&gt;
		tmpfields = mw.text.split(tmpfields, ',')&lt;br /&gt;
	end&lt;br /&gt;
	for num, hl in pairs(tmpfields) do&lt;br /&gt;
		if mw.ustring.find(hl, '=', 1, true) then&lt;br /&gt;
			hl = mw.ustring.match(hl, '^.+=(.+)$')&lt;br /&gt;
		end&lt;br /&gt;
		headlines[num] = hl&lt;br /&gt;
	end&lt;br /&gt;
	classDebug:log(23, ' having headlines: ' .. _TT.printTable(headlines))&lt;br /&gt;
	attributes.default = ''&lt;br /&gt;
	attributes.intro = nil&lt;br /&gt;
	attributes.format = 'template'&lt;br /&gt;
	attributes['more results text'] = ''&lt;br /&gt;
	attributes.outro = nil&lt;br /&gt;
	attributes.template = cfg.helperTemplate&lt;br /&gt;
	local ret = nil&lt;br /&gt;
	local result = mw.text.trim(p.rawquery(query, attributes))&lt;br /&gt;
	if result and mw.ustring.len(result) &amp;gt; 0 then&lt;br /&gt;
		classDebug:log(24, ' result is: ' .. result)&lt;br /&gt;
		ret = {}&lt;br /&gt;
		for row in mw.text.gsplit(result, cfg.resultSeparator, true) do&lt;br /&gt;
			if mw.ustring.len(row) &amp;gt; 0 then&lt;br /&gt;
				local sequence = {}&lt;br /&gt;
				local array = {}&lt;br /&gt;
				local num = 1&lt;br /&gt;
				for v in mw.text.gsplit(row, cfg.fieldSeparator, true) do&lt;br /&gt;
					if mw.ustring.match(v, '^[0-9]+$') then&lt;br /&gt;
						v = tonumber(v)&lt;br /&gt;
					else&lt;br /&gt;
						v = mw.text.decode(mw.text.decode(v))&lt;br /&gt;
						-- we have to decode twice. first for the encoding happening through format=template encapsulation and second because of queryParserHelper's nowiki&lt;br /&gt;
					end&lt;br /&gt;
					table.insert(sequence, v)&lt;br /&gt;
					if headlines[num] then&lt;br /&gt;
						array[headlines[num]] = v&lt;br /&gt;
					else&lt;br /&gt;
						array[num] = v&lt;br /&gt;
					end&lt;br /&gt;
					num = num + 1&lt;br /&gt;
				end&lt;br /&gt;
--				for k, v in pairs(sequence) do&lt;br /&gt;
--					array[k] = v&lt;br /&gt;
--				end&lt;br /&gt;
				if  _TT.size(array) &amp;gt; 0 then&lt;br /&gt;
					if not retainBlanks then&lt;br /&gt;
						-- now delete all entries with an empty value&lt;br /&gt;
						for k, v in pairs(array) do&lt;br /&gt;
							if mw.ustring.len(tostring(v)) == 0 then&lt;br /&gt;
								array[k] = nil&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					table.insert(ret, array)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.queryParserHelper(frame)&lt;br /&gt;
	local args = getArgs(frame, { trim = false, removeBlanks = false })&lt;br /&gt;
	local ret = ''&lt;br /&gt;
	for _, val in pairs(args) do&lt;br /&gt;
		ret = ret .. mw.text.nowiki(val) .. cfg.fieldSeparator&lt;br /&gt;
		-- we need the nowiki, otherwise some the result could produce some unwanted parser results (mw's parser for instance would apply a hrefs to external links)&lt;br /&gt;
	end&lt;br /&gt;
	return mw.ustring.sub(ret, 1, -1 - mw.ustring.len(cfg.fieldSeparator)) .. cfg.resultSeparator&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.rawquery(query, attributes)&lt;br /&gt;
	classDebug:log(21, 'entering CargoUtil.rawquery', 'CargoUtil.rawquery')&lt;br /&gt;
	classDebug:log(23, ' with query: ' .. (query and _TT.printTable(query) or 'NONE'), 'CargoUtil.rawquery')&lt;br /&gt;
	classDebug:log(23, ' with attributes: ' .. (attributes and _TT.printTable(attributes) or 'NONE'), 'CargoUtil.rawquery')&lt;br /&gt;
	local tables = query.tables&lt;br /&gt;
	local joins = query.joins or query.join&lt;br /&gt;
	local fields = query.fields&lt;br /&gt;
	local where = query.where&lt;br /&gt;
	local group = query.group&lt;br /&gt;
	local having = query.having&lt;br /&gt;
	local order = query.order&lt;br /&gt;
	if tables and #tables &amp;gt; 0 and fields and #fields &amp;gt; 0 then&lt;br /&gt;
		local frame = mw.getCurrentFrame()&lt;br /&gt;
		if type(tables) == 'table' then&lt;br /&gt;
			tables = table.concat(tables, ',')&lt;br /&gt;
		end&lt;br /&gt;
		local arguments = attributes or {}&lt;br /&gt;
		if joins and #joins &amp;gt; 0 then&lt;br /&gt;
			if type(joins) == 'table' then&lt;br /&gt;
				arguments['join on'] = table.concat(joins, ',')&lt;br /&gt;
			else&lt;br /&gt;
				arguments['join on'] = joins&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if type(fields) == 'table' then&lt;br /&gt;
			arguments.fields = table.concat(fields, ',')&lt;br /&gt;
		else&lt;br /&gt;
			arguments.fields = fields&lt;br /&gt;
		end&lt;br /&gt;
		if where and (type(where) == 'table' or mw.ustring.len(where) &amp;gt; 0) then&lt;br /&gt;
			if type(where) == 'table' then&lt;br /&gt;
				if where[1] then	-- sequence assumed&lt;br /&gt;
					arguments.where = table.concat(where, ',')&lt;br /&gt;
				else&lt;br /&gt;
					arguments.where = ''&lt;br /&gt;
					for k, v in pairs(where) do&lt;br /&gt;
						arguments.where = arguments.where .. k .. '=' .. v .. ','&lt;br /&gt;
					end&lt;br /&gt;
					arguments.where = mw.ustring.sub(arguments.where, 1, -2)&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				arguments.where = where&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if group and #group &amp;gt; 0 then&lt;br /&gt;
			if type(group) == 'table' then&lt;br /&gt;
				arguments['group by'] = table.concat(group, ',')&lt;br /&gt;
			else&lt;br /&gt;
				arguments['group by'] = group&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if having and (type(having) == 'table' or mw.ustring.len(having) &amp;gt; 0) then&lt;br /&gt;
			if type(having) == 'table' then&lt;br /&gt;
				if having[1] then	-- sequence assumed&lt;br /&gt;
					arguments.having = table.concat(having, ',')&lt;br /&gt;
				else&lt;br /&gt;
					arguments.having = ''&lt;br /&gt;
					for k, v in pairs(having) do&lt;br /&gt;
						arguments.having = arguments.having .. k .. '=' .. v .. ','&lt;br /&gt;
					end&lt;br /&gt;
					arguments.having = mw.ustring.sub(arguments.having, 1, -2)&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				arguments.having = having&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if order and #order &amp;gt; 0 then&lt;br /&gt;
			if type(order) == 'table' then&lt;br /&gt;
				arguments['order by'] = table.concat(order, ',')&lt;br /&gt;
			else&lt;br /&gt;
				arguments['order by'] = order&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		classDebug:log(24, ' calling parser function with tables: ' .. tables .. ' and arguments: ' .. _TT.printTable(arguments))&lt;br /&gt;
		return frame:callParserFunction{ name='#cargo_query:tables=' .. tables, args = arguments }&lt;br /&gt;
	else&lt;br /&gt;
		if tables and #tables &amp;gt; 0 then&lt;br /&gt;
			error('Argument query.tables is missing or empty! (calling from ' .. tostring(self) .. ')', 2)&lt;br /&gt;
		else&lt;br /&gt;
			error('Argument query.fields is missing or empty! (calling from ' .. tostring(self) .. ')', 2)&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.store(dbtable, data)&lt;br /&gt;
	classDebug:log(21, 'entering CargoUtil.store')&lt;br /&gt;
	classDebug:log(22, ' with table &amp;quot;' .. dbtable .. '&amp;quot; and data ' ..&lt;br /&gt;
		(type(data) == &amp;quot;string&amp;quot; and '&amp;quot;' .. data .. '&amp;quot;' or 'of type ' .. type(data)))&lt;br /&gt;
	if type(data) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		classDebug:log(23, ' datatable: ' .. _TT.printTable(data))&lt;br /&gt;
	end&lt;br /&gt;
	local ret = false&lt;br /&gt;
	if type(data) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		local frame = mw.getCurrentFrame()&lt;br /&gt;
		ret = frame:callParserFunction{name = '#cargo_store:_table=' .. dbtable, args = data}&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>mw&gt;Oetterer</name></author>
	</entry>
</feed>