<?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-11-01T20:06:37Z</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, 16: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 13. Februar 2016, 23: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) == &#039;boolean&#039; 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 = &amp;#039;#cargo_store:_table=&amp;#039; .. 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 = &amp;#039;#cargo_store:_table=&amp;#039; .. 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(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
local classDebug = require(&amp;#039;Module:Debug/class&amp;#039;)&lt;br /&gt;
local _TT = require(&amp;#039;Module:TableTools&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local cfg = {&lt;br /&gt;
	fieldSeparator = &amp;#039;###~~~@@@~~~###&amp;#039;,&lt;br /&gt;
	helperTemplate = &amp;#039;CargoUtilQueryParserHelper&amp;#039;,&lt;br /&gt;
	resultSeparator = &amp;#039;#####~~~****~~~#####&amp;#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.declare(dbtable, dbfields)&lt;br /&gt;
	classDebug:log(21, &amp;#039;entering CargoUtil.declare&amp;#039;, &amp;#039;CargoUtil.declare&amp;#039;)&lt;br /&gt;
	classDebug:log(22, &amp;#039; with table &amp;quot;&amp;#039; .. dbtable .. &amp;#039;&amp;quot; and fields &amp;#039; ..&lt;br /&gt;
		(type(dbfields) == &amp;quot;string&amp;quot; and &amp;#039;&amp;quot;&amp;#039; .. dbfields .. &amp;#039;&amp;quot;&amp;#039; or &amp;#039;of type &amp;#039; .. type(dbfields)), &amp;#039;CargoUtil.declare&amp;#039;)&lt;br /&gt;
	if type(dbfields) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		classDebug:log(23, &amp;#039; datatable: &amp;#039; .. _TT.printTable(dbfields), &amp;#039;CargoUtil.declare&amp;#039;)&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(&amp;#039;#cargo_declare:_table=&amp;#039; .. dbtable, dbfields)&lt;br /&gt;
	elseif type(dbfields) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		ret = frame:callParserFunction{name = &amp;#039;#cargo_declare:_table=&amp;#039; .. 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, &amp;#039;entering CargoUtil.query&amp;#039;, &amp;#039;CargoUtil.query&amp;#039;)&lt;br /&gt;
	classDebug:log(23, &amp;#039; with query: &amp;#039; .. (query and _TT.printTable(query) or &amp;#039;NONE&amp;#039;), &amp;#039;CargoUtil.query&amp;#039;)&lt;br /&gt;
	classDebug:log(23, &amp;#039; with attributes: &amp;#039; .. (attributes and _TT.printTable(attributes) or &amp;#039;NONE&amp;#039;), &amp;#039;CargoUtil.query&amp;#039;)&lt;br /&gt;
	local attributes = attributes or {}&lt;br /&gt;
	if type(attributes) ~= &amp;#039;table&amp;#039; 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) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
		tmpfields = mw.text.split(tmpfields, &amp;#039;,&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	for num, hl in pairs(tmpfields) do&lt;br /&gt;
		if mw.ustring.find(hl, &amp;#039;=&amp;#039;, 1, true) then&lt;br /&gt;
			hl = mw.ustring.match(hl, &amp;#039;^.+=(.+)$&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		headlines[num] = hl&lt;br /&gt;
	end&lt;br /&gt;
	classDebug:log(23, &amp;#039; having headlines: &amp;#039; .. _TT.printTable(headlines))&lt;br /&gt;
	attributes.default = &amp;#039;&amp;#039;&lt;br /&gt;
	attributes.intro = nil&lt;br /&gt;
	attributes.format = &amp;#039;template&amp;#039;&lt;br /&gt;
	attributes[&amp;#039;more results text&amp;#039;] = &amp;#039;&amp;#039;&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, &amp;#039; result is: &amp;#039; .. 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, &amp;#039;^[0-9]+$&amp;#039;) 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&amp;#039;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 = &amp;#039;&amp;#039;&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&amp;#039;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, &amp;#039;entering CargoUtil.rawquery&amp;#039;, &amp;#039;CargoUtil.rawquery&amp;#039;)&lt;br /&gt;
	classDebug:log(23, &amp;#039; with query: &amp;#039; .. (query and _TT.printTable(query) or &amp;#039;NONE&amp;#039;), &amp;#039;CargoUtil.rawquery&amp;#039;)&lt;br /&gt;
	classDebug:log(23, &amp;#039; with attributes: &amp;#039; .. (attributes and _TT.printTable(attributes) or &amp;#039;NONE&amp;#039;), &amp;#039;CargoUtil.rawquery&amp;#039;)&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) == &amp;#039;table&amp;#039; then&lt;br /&gt;
			tables = table.concat(tables, &amp;#039;,&amp;#039;)&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) == &amp;#039;table&amp;#039; then&lt;br /&gt;
				arguments[&amp;#039;join on&amp;#039;] = table.concat(joins, &amp;#039;,&amp;#039;)&lt;br /&gt;
			else&lt;br /&gt;
				arguments[&amp;#039;join on&amp;#039;] = joins&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if type(fields) == &amp;#039;table&amp;#039; then&lt;br /&gt;
			arguments.fields = table.concat(fields, &amp;#039;,&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			arguments.fields = fields&lt;br /&gt;
		end&lt;br /&gt;
		if where and (type(where) == &amp;#039;table&amp;#039; or mw.ustring.len(where) &amp;gt; 0) then&lt;br /&gt;
			if type(where) == &amp;#039;table&amp;#039; then&lt;br /&gt;
				if where[1] then	-- sequence assumed&lt;br /&gt;
					arguments.where = table.concat(where, &amp;#039;,&amp;#039;)&lt;br /&gt;
				else&lt;br /&gt;
					arguments.where = &amp;#039;&amp;#039;&lt;br /&gt;
					for k, v in pairs(where) do&lt;br /&gt;
						arguments.where = arguments.where .. k .. &amp;#039;=&amp;#039; .. v .. &amp;#039;,&amp;#039;&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) == &amp;#039;table&amp;#039; then&lt;br /&gt;
				arguments[&amp;#039;group by&amp;#039;] = table.concat(group, &amp;#039;,&amp;#039;)&lt;br /&gt;
			else&lt;br /&gt;
				arguments[&amp;#039;group by&amp;#039;] = group&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if having and (type(having) == &amp;#039;table&amp;#039; or mw.ustring.len(having) &amp;gt; 0) then&lt;br /&gt;
			if type(having) == &amp;#039;table&amp;#039; then&lt;br /&gt;
				if having[1] then	-- sequence assumed&lt;br /&gt;
					arguments.having = table.concat(having, &amp;#039;,&amp;#039;)&lt;br /&gt;
				else&lt;br /&gt;
					arguments.having = &amp;#039;&amp;#039;&lt;br /&gt;
					for k, v in pairs(having) do&lt;br /&gt;
						arguments.having = arguments.having .. k .. &amp;#039;=&amp;#039; .. v .. &amp;#039;,&amp;#039;&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) == &amp;#039;table&amp;#039; then&lt;br /&gt;
				arguments[&amp;#039;order by&amp;#039;] = table.concat(order, &amp;#039;,&amp;#039;)&lt;br /&gt;
			else&lt;br /&gt;
				arguments[&amp;#039;order by&amp;#039;] = order&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		classDebug:log(24, &amp;#039; calling parser function with tables: &amp;#039; .. tables .. &amp;#039; and arguments: &amp;#039; .. _TT.printTable(arguments))&lt;br /&gt;
		return frame:callParserFunction{ name=&amp;#039;#cargo_query:tables=&amp;#039; .. tables, args = arguments }&lt;br /&gt;
	else&lt;br /&gt;
		if tables and #tables &amp;gt; 0 then&lt;br /&gt;
			error(&amp;#039;Argument query.tables is missing or empty! (calling from &amp;#039; .. tostring(self) .. &amp;#039;)&amp;#039;, 2)&lt;br /&gt;
		else&lt;br /&gt;
			error(&amp;#039;Argument query.fields is missing or empty! (calling from &amp;#039; .. tostring(self) .. &amp;#039;)&amp;#039;, 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, &amp;#039;entering CargoUtil.store&amp;#039;)&lt;br /&gt;
	classDebug:log(22, &amp;#039; with table &amp;quot;&amp;#039; .. dbtable .. &amp;#039;&amp;quot; and data &amp;#039; ..&lt;br /&gt;
		(type(data) == &amp;quot;string&amp;quot; and &amp;#039;&amp;quot;&amp;#039; .. data .. &amp;#039;&amp;quot;&amp;#039; or &amp;#039;of type &amp;#039; .. type(data)))&lt;br /&gt;
	if type(data) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		classDebug:log(23, &amp;#039; datatable: &amp;#039; .. _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 = &amp;#039;#cargo_store:_table=&amp;#039; .. 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>